package http import ( "github.com/aykhans/oh-my-chat/internal/adapter/handlers/http/middlewares" "github.com/gofiber/contrib/websocket" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/cors" "github.com/gofiber/fiber/v2/middleware/recover" ) type Handlers struct { userHandler *UserHandler authHandler *AuthHandler chatHandler *ChatHandler } type Middlewares struct { authMiddleware *middlewares.AuthMiddleware wsMiddleware *middlewares.WSMiddleware } func NewApp( isDev bool, corsAllowedOrigins string, authMiddleware *middlewares.AuthMiddleware, wsMiddleware *middlewares.WSMiddleware, userHandler *UserHandler, authHandler *AuthHandler, chatHandler *ChatHandler, ) *fiber.App { handlers := &Handlers{ userHandler: userHandler, authHandler: authHandler, chatHandler: chatHandler, } middlewares := &Middlewares{ authMiddleware: authMiddleware, wsMiddleware: wsMiddleware, } app := fiber.New() if !isDev { app.Use(recover.New()) app.Use(cors.New(cors.Config{ AllowOrigins: corsAllowedOrigins, })) } router := app.Group("/api") setV1Routers(router, handlers, middlewares) return app } func setV1Routers( router fiber.Router, handlers *Handlers, middlewares *Middlewares, ) { router = router.Group("/v1") { // User routes user := router.Group("/user") user.Post("/register", handlers.userHandler.Register) } { // Auth routes auth := router.Group("/auth") auth.Post("/login", handlers.authHandler.Login) } { // Chat routes chat := router.Group("/chat") chat.Use("/ws", middlewares.authMiddleware.IsUser, middlewares.wsMiddleware.Upgrade) chat.Get("/ws", websocket.New(handlers.chatHandler.Connect)) } }