Init Eslogad
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
package router
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
|
||||
type AuthHandler interface {
|
||||
Login(c *gin.Context)
|
||||
RefreshToken(c *gin.Context)
|
||||
GetProfile(c *gin.Context)
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package router
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
|
||||
type HealthHandler interface {
|
||||
HealthCheck(c *gin.Context)
|
||||
}
|
||||
|
||||
type UserHandler interface {
|
||||
ListUsers(c *gin.Context)
|
||||
GetProfile(c *gin.Context)
|
||||
UpdateProfile(c *gin.Context)
|
||||
ChangePassword(c *gin.Context)
|
||||
ListTitles(c *gin.Context)
|
||||
}
|
||||
|
||||
type FileHandler interface {
|
||||
UploadProfileAvatar(c *gin.Context)
|
||||
UploadDocument(c *gin.Context)
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package router
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
|
||||
type AuthMiddleware interface {
|
||||
RequireAuth() gin.HandlerFunc
|
||||
RequireRole(allowedRoles ...string) gin.HandlerFunc
|
||||
RequireAdminOrManager() gin.HandlerFunc
|
||||
RequireAdmin() gin.HandlerFunc
|
||||
RequireSuperAdmin() gin.HandlerFunc
|
||||
RequireActiveUser() gin.HandlerFunc
|
||||
RequirePermissions(required ...string) gin.HandlerFunc
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
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
|
||||
}
|
||||
|
||||
func NewRouter(
|
||||
cfg *config.Config,
|
||||
authHandler AuthHandler,
|
||||
authMiddleware AuthMiddleware,
|
||||
healthHandler HealthHandler,
|
||||
userHandler UserHandler,
|
||||
fileHandler FileHandler,
|
||||
) *Router {
|
||||
return &Router{
|
||||
config: cfg,
|
||||
authHandler: authHandler,
|
||||
authMiddleware: authMiddleware,
|
||||
healthHandler: healthHandler,
|
||||
userHandler: userHandler,
|
||||
fileHandler: fileHandler,
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user