package v1 import ( retribusiHandlers "api-service/internal/handlers/retribusi" "net/http" "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) // Protected routes (require authentication) protected := v1.Group("/") protected.Use(middleware.JWTAuthMiddleware(authService)) { // WebSocket endpoint protected.GET("/websocket", WebSocketHandler) protected.GET("/webservice", WebServiceHandler) } } return router } // WebSocketHandler handles WebSocket connections func WebSocketHandler(c *gin.Context) { // This will be implemented with proper WebSocket handling c.JSON(http.StatusOK, gin.H{"message": "WebSocket endpoint"}) } func WebServiceHandler(c *gin.Context) { // This will be implemented with proper WebSocket handling c.JSON(http.StatusOK, gin.H{"message": "WebSocket endpoint"}) }