Files
antrean-anjungan/internal/routes/v1/routes.go
2025-08-18 20:02:34 +07:00

73 lines
2.2 KiB
Go

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
}