package appeal import ( "api_yal/internal/logger" "api_yal/internal/middleware" "api_yal/internal/repository" "github.com/go-chi/chi/v5" "gorm.io/gorm" ) // RegisterRoutes регистрирует маршруты для работы с обращениями func RegisterRoutes(r chi.Router, db *gorm.DB, jwtSecret string) { l := logger.Get() l.Debug("Регистрация маршрутов обращений") // Создаем репозиторий и сервис appealRepo := repository.NewAppealRepository(db) appealService := NewAppealService(appealRepo) appealHandler := NewHandler(appealService) // Публичные маршруты (не требуют аутентификации) r.Post("/appeals", appealHandler.CreateAppeal) r.Get("/appeals/{id}", appealHandler.GetAppeal) // Защищенные маршруты (требуют аутентификации) r.Group(func(r chi.Router) { r.Use(middleware.AuthMiddleware(jwtSecret)) // Личные обращения пользователя r.Get("/appeals/me", appealHandler.GetMyAppeals) // Обновление и удаление своих обращений r.Put("/appeals/{id}", appealHandler.UpdateAppeal) r.Delete("/appeals/{id}", appealHandler.DeleteAppeal) }) // Административные маршруты (требуют прав администратора или модератора) r.Group(func(r chi.Router) { r.Use(middleware.AuthMiddleware(jwtSecret)) r.Use(middleware.AdminOnlyMiddleware) // Или создайте ModeratorOnlyMiddleware // Полный список обращений (с фильтрацией) r.Get("/appeals", appealHandler.ListAppeals) // Управление статусами r.Patch("/appeals/{id}/status", appealHandler.UpdateAppealStatus) r.Post("/appeals/{id}/assign", appealHandler.AssignAppeal) r.Post("/appeals/{id}/resolve", appealHandler.ResolveAppeal) // История и статистика r.Get("/appeals/{id}/history", appealHandler.GetAppealHistory) r.Get("/appeals/statistics", appealHandler.GetAppealStatistics) // Просмотр обращений конкретного пользователя r.Get("/appeals/user/{userID}", appealHandler.GetAppealsByAuthor) }) l.Info("Маршруты обращений зарегистрированы") }