package feetback import ( "api_yal/internal/logger" "api_yal/internal/middleware" "api_yal/internal/repository" "github.com/go-chi/chi/v5" "gorm.io/gorm" ) func RegisterRoutes(r chi.Router, db *gorm.DB, jwtSecret string) { l := logger.Get() l.Info("Registering routes for feetback") feedbackRepo := repository.NewFeedbackRepository(db) feedbackService := NewFeedbackServiceImpl(feedbackRepo) feedbackHandler := NewFeedbackHandler(feedbackService) // Группируем маршруты для отзывов r.Route("/feedbacks", func(r chi.Router) { // Публичные маршруты (не требуют аутентификации) r.Get("/", feedbackHandler.ListFeedbacks) // GET /api/v1/feedbacks r.Get("/search", feedbackHandler.SearchFeedbacks) // GET /api/v1/feedbacks/search?q=query r.Get("/{id}", feedbackHandler.GetFeedbackByID) // GET /api/v1/feedbacks/{id} // Маршруты для фильтрации r.Get("/object/{objectID}", feedbackHandler.GetFeedbacksByObject) // GET /api/v1/feedbacks/object/{objectID} r.Get("/platform/{platform}", feedbackHandler.GetFeedbacksByPlatform) // GET /api/v1/feedbacks/platform/{platform} // Маршруты для комментариев (публичные) r.Get("/{id}/comments", feedbackHandler.GetFeedbackComments) // GET /api/v1/feedbacks/{id}/comments // Защищенные маршруты (требуют аутентификации) r.Group(func(r chi.Router) { // Здесь можно добавить middleware для проверки JWT токена r.Use(middleware.AuthMiddleware(jwtSecret)) r.Post("/", feedbackHandler.CreateFeedback) // POST /api/v1/feedbacks r.Put("/{id}", feedbackHandler.UpdateFeedback) // PUT /api/v1/feedbacks/{id} r.Delete("/{id}", feedbackHandler.DeleteFeedback) // DELETE /api/v1/feedbacks/{id} // Маршруты для комментариев (требуют аутентификации) r.Post("/{id}/comments", feedbackHandler.AddComment) // POST /api/v1/feedbacks/{id}/comments r.Put("/{id}/comments/{commentID}", feedbackHandler.UpdateComment) // PUT /api/v1/feedbacks/{id}/comments/{commentID} r.Delete("/{id}/comments/{commentID}", feedbackHandler.DeleteComment) // DELETE /api/v1/feedbacks/{id}/comments/{commentID} // Маршруты для владельца (получение своих отзывов) r.Get("/my", feedbackHandler.GetMyFeedbacks) // GET /api/v1/feedbacks/my }) }) }