package router import ( "go-backend-template/config" "go-backend-template/internal/middleware" "github.com/gin-gonic/gin" ) type Router struct { config *config.Config authHandler AuthHandler healthHandler HealthHandler authMiddleware AuthMiddleware userHandler UserHandler dukcapilHandler DukcapilHandler } func NewRouter( cfg *config.Config, authHandler AuthHandler, authMiddleware AuthMiddleware, healthHandler HealthHandler, userHandler UserHandler, dukcapilHandler DukcapilHandler, ) *Router { return &Router{ config: cfg, authHandler: authHandler, authMiddleware: authMiddleware, healthHandler: healthHandler, userHandler: userHandler, dukcapilHandler: dukcapilHandler, } } 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(), middleware.CORS(), ) r.addAppRoutes(engine) return engine } func (r *Router) addAppRoutes(rg *gin.Engine) { rg.GET("/health", r.healthHandler.HealthCheck) v1 := rg.Group("/api/v1") { if r.authHandler != nil { auth := v1.Group("/auth") { auth.POST("/login", r.authHandler.Login) } } if r.dukcapilHandler != nil { dukcapil := v1.Group("/dukcapil") { dukcapil.POST("/face-match", r.dukcapilHandler.FaceMatch) } } } }