On branch main

modified:   main_dc/yalarba/api_yal/internal/domain/appeal/router.go
	modified:   main_dc/yalarba/api_yal/internal/domain/feetback/dto.go
	modified:   main_dc/yalarba/api_yal/internal/domain/feetback/handler.go
	modified:   main_dc/yalarba/api_yal/internal/domain/feetback/router.go
	modified:   main_dc/yalarba/api_yal/internal/domain/feetback/service.go
	modified:   main_dc/yalarba/api_yal/internal/models/feedback.go
	modified:   main_dc/yalarba/api_yal/internal/repository/comment_repository.go
	modified:   main_dc/yalarba/api_yal/internal/repository/feedback_repository.go
	modified:   main_dc/yalarba/api_yal/internal/repository/feedback_repository_impl.go
	modified:   main_dc/yalarba/api_yal/internal/router/router.go
craete routerRegister, service, hander, dto for feedback
This commit is contained in:
2026-05-19 15:01:57 +05:00
parent 42549eb116
commit 63d486f48d
10 changed files with 756 additions and 1156 deletions
@@ -2,9 +2,10 @@ package router
import (
"api_yal/internal/config"
"api_yal/internal/logger"
"api_yal/internal/domain/auth"
"api_yal/internal/domain/account"
"api_yal/internal/domain/auth"
"api_yal/internal/domain/feetback"
"api_yal/internal/logger"
"time"
"encoding/json"
@@ -27,7 +28,7 @@ func SetupRouter(db *gorm.DB, config *config.Config) http.Handler {
// ВСЕ middleware должны быть определены ДО маршрутов
// 1. Сначала добавляем production middleware
addProductionMiddleware(r, config)
// 2. Затем добавляем middleware аутентификации (он тоже применяется ко всем маршрутам)
zapLogger.Debug("Auth middleware применён")
@@ -36,7 +37,7 @@ func SetupRouter(db *gorm.DB, config *config.Config) http.Handler {
r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
if err := json.NewEncoder(w).Encode(map[string]string{"status": "healthy"}); err != nil {
zapLogger.Error("Ошибка при отправке health check ответа",
zap.String("path", r.URL.Path),
@@ -50,9 +51,13 @@ func SetupRouter(db *gorm.DB, config *config.Config) http.Handler {
r.Route("/api/v1", func(r chi.Router) {
// Регистрируем маршруты аутентификации
auth.RegisterRoutes(r, db, config.JWTSecret)
// Регистрируем маршруты аккаунтов
account.RegisterRoutes(r, db, config.JWTSecret)
// Регистрируем маршруты отзывов
feetback.RegisterRoutes(r, db, config.JWTSecret) // Добавьте эту строку
})
zapLogger.Info("Настройка маршрутов завершена")
@@ -74,7 +79,7 @@ func addProductionMiddleware(r *chi.Mux, config *config.Config) {
r.Use(ChiMiddleware.Timeout(30 * time.Second))
r.Use(ChiMiddleware.Compress(5, "gzip"))
r.Use(ChiMiddleware.StripSlashes)
// CORS
r.Use(cors.Handler(cors.Options{
AllowedOrigins: config.CORS.AllowedOrigins,
@@ -84,15 +89,15 @@ func addProductionMiddleware(r *chi.Mux, config *config.Config) {
AllowCredentials: true,
MaxAge: 300,
}))
// Content-Type проверка
r.Use(ChiMiddleware.AllowContentType("application/json", "application/xml"))
// Rate limiting
if config.RateLimit.Enabled {
r.Use(ChiMiddleware.Throttle(config.RateLimit.RequestsPerSecond))
}
// Security headers
r.Use(func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
@@ -100,12 +105,12 @@ func addProductionMiddleware(r *chi.Mux, config *config.Config) {
w.Header().Set("X-Frame-Options", "DENY")
w.Header().Set("X-XSS-Protection", "1; mode=block")
w.Header().Set("Referrer-Policy", "strict-origin-when-cross-origin")
if config.Environment == "production" {
w.Header().Set("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload")
}
next.ServeHTTP(w, r)
})
})
}
}