package routes import ( "antrian-operasi/internal/config" "antrian-operasi/internal/database" "antrian-operasi/internal/domain/access" antrianoperasi "antrian-operasi/internal/domain/antrian_operasi" "antrian-operasi/internal/domain/dashboard" "antrian-operasi/internal/domain/keycloak" "antrian-operasi/internal/domain/reference/diagnosa" "antrian-operasi/internal/domain/reference/dokter" "antrian-operasi/internal/domain/reference/kategori" "antrian-operasi/internal/domain/reference/pasien" "antrian-operasi/internal/domain/reference/spesialis" "antrian-operasi/internal/domain/reference/tindakan" "antrian-operasi/internal/middleware" "log" "net/http" "github.com/gin-gonic/gin" swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" ) func RegisterRoutes(cfg *config.Config, dbService database.Service) *gin.Engine { gin.SetMode(cfg.Server.Mode) router := gin.New() router.GET("/ping", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "pong", }) }) router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) // init middleware router.Use(middleware.SecureCORSConfig(cfg.Security)) authKeycloak, err := middleware.AuthKeycloak(cfg.Keycloak) if err != nil { log.Fatalf("Unable to initiate keycloak auth") } api := router.Group("/api") acc := api.Group("/access", authKeycloak) { access.RegisterRoutes(acc, dbService) } antrian := api.Group("/antrian-operasi", authKeycloak) { antrianoperasi.RegisterRoutes(antrian, dbService) } reference := api.Group("/reference", authKeycloak) { kategori.RegisterRoutes(reference, dbService) spesialis.RegisterRoutes(reference, dbService) dokter.RegisterRoutes(reference, dbService) pasien.RegisterRoutes(reference, dbService) diagnosa.RegisterRoutes(reference, dbService) tindakan.RegisterRoutes(reference, dbService) } dboard := api.Group("dashboard", authKeycloak) { dashboard.RegisterRoutes(dboard, dbService) } kc := api.Group("/keycloak") { keycloak.RegisterRoutes(kc, cfg.Keycloak) } return router }