package router import ( "evanpage-backend/internal/config" "evanpage-backend/internal/db" "evanpage-backend/internal/handler" "evanpage-backend/internal/middleware" "evanpage-backend/internal/repository" "evanpage-backend/internal/service" "github.com/gin-gonic/gin" ) func Setup(cfg *config.Config) *gin.Engine { r := gin.New() r.Use(middleware.Logger()) r.Use(middleware.CORS()) r.Use(gin.Recovery()) userRepo := repository.NewUserRepository(db.DB) userService := service.NewUserService(userRepo) authHandler := handler.NewAuthHandler(userService) healthHandler := handler.NewHealthHandler(db.DB) adminHandler := handler.NewAdminHandler(userService) // Public routes r.POST("/api/auth/register", authHandler.Register) r.POST("/api/auth/local-login", authHandler.LocalLogin) r.POST("/api/auth/lookup-binding", authHandler.LookupBinding) r.POST("/api/auth/bind-keycloak", authHandler.BindKeycloak) r.POST("/api/auth/init", authHandler.InitAdmin) r.GET("/api/health", healthHandler.Check) // Protected routes api := r.Group("/api") api.Use(middleware.AuthProxy()) { } // Admin routes admin := api.Group("/admin") admin.Use(middleware.RequireRole("admin")) { admin.GET("/users", adminHandler.ListUsers) admin.POST("/users", adminHandler.CreateUser) admin.DELETE("/users/:id", adminHandler.DeleteUser) } return r }