From 032ce668657052f666478776e4912accb41da3a0 Mon Sep 17 00:00:00 2001 From: valitovgaziz Date: Wed, 12 Nov 2025 05:59:14 +0500 Subject: [PATCH] modified: main_dc/yalarba/api_es/cmd/main.go modified: main_dc/yalarba/api_es/internal/handler/all_handlers.go modified: main_dc/yalarba/api_es/internal/handler/user_handler.go new file: main_dc/yalarba/api_es/internal/router/router.go add rounter, logger router --- main_dc/yalarba/api_es/cmd/main.go | 11 +--- .../api_es/internal/handler/all_handlers.go | 34 +++++++++++- .../api_es/internal/handler/user_handler.go | 3 +- .../yalarba/api_es/internal/router/router.go | 55 +++++++++++++++++++ 4 files changed, 92 insertions(+), 11 deletions(-) create mode 100644 main_dc/yalarba/api_es/internal/router/router.go diff --git a/main_dc/yalarba/api_es/cmd/main.go b/main_dc/yalarba/api_es/cmd/main.go index f58b287..eb51774 100644 --- a/main_dc/yalarba/api_es/cmd/main.go +++ b/main_dc/yalarba/api_es/cmd/main.go @@ -1,15 +1,14 @@ package main import ( - "encoding/json" "log" "net/http" "api_es/internal/config" "api_es/internal/database" + "api_es/internal/router" "api_es/pkg/logger" - "github.com/go-chi/chi/v5" "go.uber.org/zap" "gorm.io/gorm" ) @@ -40,13 +39,9 @@ func main() { } zapLogger.Info("database ping successful") - r := chi.NewRouter() - // Health check - r.Get("/health", func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(map[string]string{"status": "healthy"}) - }) + zapLogger.Info("setup router") + r := router.SetupRouter(db, cfg) // Запуск сервера zapLogger.Info("Server starting on port %s", zap.String("AppPort", cfg.AppPort)) diff --git a/main_dc/yalarba/api_es/internal/handler/all_handlers.go b/main_dc/yalarba/api_es/internal/handler/all_handlers.go index cd97792..2eb75c1 100644 --- a/main_dc/yalarba/api_es/internal/handler/all_handlers.go +++ b/main_dc/yalarba/api_es/internal/handler/all_handlers.go @@ -1 +1,33 @@ -package handler \ No newline at end of file +package handler + +import ( + "api_es/internal/config" + "api_es/internal/repository" + "api_es/internal/service" + "api_es/internal/utils" + + "gorm.io/gorm" +) + +type AllHandler struct { + userHandler *UserHandler +} + +func NewAllHandler(db *gorm.DB, cfg *config.Config) *AllHandler { + + userRepo := repository.NewUserRepository(db) + + userService := service.NewUserService(userRepo, utils.NewJWTUtil(cfg.JWTSecret)) + + userHandler := NewUserHandler(userService) + + return &AllHandler{ + userHandler: userHandler, + } + +} + + +func (h *AllHandler) UserHandler() *UserHandler { + return h.userHandler +} \ No newline at end of file diff --git a/main_dc/yalarba/api_es/internal/handler/user_handler.go b/main_dc/yalarba/api_es/internal/handler/user_handler.go index 978283f..52be894 100644 --- a/main_dc/yalarba/api_es/internal/handler/user_handler.go +++ b/main_dc/yalarba/api_es/internal/handler/user_handler.go @@ -231,8 +231,7 @@ func (h *UserHandler) ListUsers(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(users) } -func (h *UserHandler) Routes() chi.Router { - r := chi.NewRouter() +func (h *UserHandler) Routes(r chi.Router) chi.Router { r.Route("/auth", func(r chi.Router) { r.Post("/register", h.Register) diff --git a/main_dc/yalarba/api_es/internal/router/router.go b/main_dc/yalarba/api_es/internal/router/router.go new file mode 100644 index 0000000..5ba4618 --- /dev/null +++ b/main_dc/yalarba/api_es/internal/router/router.go @@ -0,0 +1,55 @@ +package router + +import ( + "api_es/internal/config" + "api_es/pkg/logger" + "encoding/json" + "net/http" + + "api_es/internal/handler" + appMiddleware "api_es/internal/middleware" + + "github.com/go-chi/chi/v5" + "gorm.io/gorm" +) + +func SetupRouter(db *gorm.DB, config *config.Config) http.Handler { + zapLogger := logger.Get() + zapLogger.Debug("Start setup rounting") + r := chi.NewRouter() + + // Initialize logger + baseLogger := logger.NewWrapper(logger.Get()) + + // Health check + r.Get("/health", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(map[string]string{"status": "healthy"}) + }) + + h := handler.NewAllHandler(db, config) + + r.Route("/auth", func(r chi.Router) { + r.Post("/register", h.UserHandler().Register) + r.Post("/login", h.UserHandler().Login) + }) + + r.Route("/users", func(r chi.Router) { + r.Use(appMiddleware.AuthMiddleware) + + r.Get("/profile", h.UserHandler().GetProfile) + r.Put("/profile", h.UserHandler().UpdateProfile) + + // Admin routes + r.With(appMiddleware.AdminMiddleware).Get("/", h.UserHandler().ListUsers) + r.With(appMiddleware.AdminMiddleware).Get("/{id}", h.UserHandler().GetUser) + }) + + zapLogger.Debug("End setup rounting") + + // Логируем все зарегистрированные маршруты + routeLogger := logger.NewRouteLogger(baseLogger) + routeLogger.LogRoutes(r) + + return r +}