2024-10-13 13:31:58 +04:00

77 lines
1.7 KiB
Go

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))
}
}