package v1 import ( bpjsPesertaHandlers "api-service/internal/handlers/bpjs/reference" retribusiHandlers "api-service/internal/handlers/retribusi" "api-service/internal/config" "api-service/internal/middleware" services "api-service/internal/services/auth" "github.com/gin-gonic/gin" swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" authHandlers "api-service/internal/handlers/auth" ) // RegisterRoutes registers all API routes for version 1 func RegisterRoutes(cfg *config.Config) *gin.Engine { router := gin.New() // Add middleware router.Use(middleware.CORSConfig()) router.Use(middleware.ErrorHandler()) router.Use(gin.Logger()) router.Use(gin.Recovery()) // Initialize services authService := services.NewAuthService(cfg) // Swagger UI route router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) // API v1 group v1 := router.Group("/api/v1") { // Public routes (no authentication required) // Authentication routes authHandler := authHandlers.NewAuthHandler(authService) tokenHandler := authHandlers.NewTokenHandler(authService) v1.POST("/auth/login", authHandler.Login) v1.POST("/auth/register", authHandler.Register) v1.GET("/auth/me", middleware.JWTAuthMiddleware(authService), authHandler.Me) v1.POST("/auth/refresh", authHandler.RefreshToken) // Token generation routes v1.POST("/token/generate", tokenHandler.GenerateToken) v1.POST("/token/generate-direct", tokenHandler.GenerateTokenDirect) // Retribusi endpoints retribusiHandler := retribusiHandlers.NewRetribusiHandler() v1.GET("/retribusis", retribusiHandler.GetRetribusi) v1.GET("/retribusi/:id", retribusiHandler.GetRetribusiByID) v1.POST("/retribusis", retribusiHandler.CreateRetribusi) v1.PUT("/retribusi/:id", retribusiHandler.UpdateRetribusi) v1.DELETE("/retribusi/:id", retribusiHandler.DeleteRetribusi) // BPJS endpoints bpjsPesertaHandler := bpjsPesertaHandlers.NewPesertaHandler(cfg.Bpjs) v1.GET("/bpjs/Peserta/nik/:nik/tglSEP/:tglSEP", bpjsPesertaHandler.GetPesertaByNIK) protected := v1.Group("/") protected.Use(middleware.JWTAuthMiddleware(authService)) { // Protected routes (require authentication) } } return router }