Init Eslogad

This commit is contained in:
Aditya Siregar
2025-08-09 15:09:43 +07:00
commit 9e95e8ee5e
96 changed files with 7108 additions and 0 deletions
+9
View File
@@ -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)
}
+20
View File
@@ -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)
}
+13
View File
@@ -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
}
+81
View File
@@ -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)
}
}
}