2025-08-09 15:08:26 +07:00
|
|
|
package router
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"eslogad-be/config"
|
|
|
|
|
"eslogad-be/internal/middleware"
|
|
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Router struct {
|
|
|
|
|
config *config.Config
|
|
|
|
|
authHandler AuthHandler
|
|
|
|
|
healthHandler HealthHandler
|
|
|
|
|
authMiddleware AuthMiddleware
|
|
|
|
|
userHandler UserHandler
|
|
|
|
|
fileHandler FileHandler
|
2025-08-09 15:28:25 +07:00
|
|
|
rbacHandler RBACHandler
|
2025-08-09 15:08:26 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func NewRouter(
|
|
|
|
|
cfg *config.Config,
|
|
|
|
|
authHandler AuthHandler,
|
|
|
|
|
authMiddleware AuthMiddleware,
|
|
|
|
|
healthHandler HealthHandler,
|
|
|
|
|
userHandler UserHandler,
|
|
|
|
|
fileHandler FileHandler,
|
2025-08-09 15:28:25 +07:00
|
|
|
rbacHandler RBACHandler,
|
2025-08-09 15:08:26 +07:00
|
|
|
) *Router {
|
|
|
|
|
return &Router{
|
|
|
|
|
config: cfg,
|
|
|
|
|
authHandler: authHandler,
|
|
|
|
|
authMiddleware: authMiddleware,
|
|
|
|
|
healthHandler: healthHandler,
|
|
|
|
|
userHandler: userHandler,
|
|
|
|
|
fileHandler: fileHandler,
|
2025-08-09 15:28:25 +07:00
|
|
|
rbacHandler: rbacHandler,
|
2025-08-09 15:08:26 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (r *Router) Init() *gin.Engine {
|
|
|
|
|
gin.SetMode(gin.ReleaseMode)
|
|
|
|
|
engine := gin.New()
|
|
|
|
|
engine.Use(
|
|
|
|
|
middleware.JsonAPI(),
|
|
|
|
|
middleware.CorrelationID(),
|
|
|
|
|
middleware.Recover(),
|
|
|
|
|
middleware.HTTPStatLogger(),
|
|
|
|
|
middleware.PopulateContext(),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
r.addAppRoutes(engine)
|
|
|
|
|
return engine
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (r *Router) addAppRoutes(rg *gin.Engine) {
|
|
|
|
|
rg.GET("/health", r.healthHandler.HealthCheck)
|
|
|
|
|
|
|
|
|
|
v1 := rg.Group("/api/v1")
|
|
|
|
|
{
|
|
|
|
|
auth := v1.Group("/auth")
|
|
|
|
|
{
|
|
|
|
|
auth.POST("/login", r.authHandler.Login)
|
|
|
|
|
auth.POST("/refresh", r.authHandler.RefreshToken)
|
|
|
|
|
auth.GET("/profile", r.authHandler.GetProfile)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
users := v1.Group("/users")
|
|
|
|
|
users.Use(r.authMiddleware.RequireAuth())
|
|
|
|
|
{
|
|
|
|
|
users.GET("", r.authMiddleware.RequirePermissions("user.view"), r.userHandler.ListUsers)
|
|
|
|
|
users.GET("/profile", r.userHandler.GetProfile)
|
|
|
|
|
users.PUT("/profile", r.userHandler.UpdateProfile)
|
|
|
|
|
users.PUT(":id/password", r.userHandler.ChangePassword)
|
|
|
|
|
users.GET("/titles", r.userHandler.ListTitles)
|
|
|
|
|
users.POST("/profile/avatar", r.fileHandler.UploadProfileAvatar)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
files := v1.Group("/files")
|
|
|
|
|
files.Use(r.authMiddleware.RequireAuth())
|
|
|
|
|
{
|
|
|
|
|
files.POST("/documents", r.fileHandler.UploadDocument)
|
|
|
|
|
}
|
2025-08-09 15:28:25 +07:00
|
|
|
|
|
|
|
|
rbac := v1.Group("/rbac")
|
|
|
|
|
rbac.Use(r.authMiddleware.RequireAuth())
|
|
|
|
|
{
|
|
|
|
|
rbac.GET("/permissions", r.rbacHandler.ListPermissions)
|
|
|
|
|
rbac.POST("/permissions", r.rbacHandler.CreatePermission)
|
|
|
|
|
rbac.PUT("/permissions/:id", r.rbacHandler.UpdatePermission)
|
|
|
|
|
rbac.DELETE("/permissions/:id", r.rbacHandler.DeletePermission)
|
|
|
|
|
rbac.GET("/roles", r.rbacHandler.ListRoles)
|
|
|
|
|
rbac.POST("/roles", r.rbacHandler.CreateRole)
|
|
|
|
|
rbac.PUT("/roles/:id", r.rbacHandler.UpdateRole)
|
|
|
|
|
rbac.DELETE("/roles/:id", r.rbacHandler.DeleteRole)
|
|
|
|
|
}
|
2025-08-09 15:08:26 +07:00
|
|
|
}
|
|
|
|
|
}
|