77 lines
1.7 KiB
Go
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))
|
|
}
|
|
}
|