package routes import ( "cloudnest/internal/interface/http/handler" "cloudnest/internal/middleware" "github.com/gin-gonic/gin" ) // ServiceType defines the type of service that is running. // ServiceType 定义运行的服务类型。 type ServiceType string const ( // ServiceTypeAuth is the authentication service. // ServiceTypeAuth 是认证服务。 ServiceTypeAuth ServiceType = "auth" // ServiceTypeFile is the file management service. // ServiceTypeFile 是文件管理服务。 ServiceTypeFile ServiceType = "file" // ServiceTypeAll is for testing purposes, registers all routes. // ServiceTypeAll 用于测试目的,注册所有路由。 ServiceTypeAll ServiceType = "all" ) // SetupRoutes registers API routes based on the service type. // SetupRoutes 根据服务类型注册 API 路由。 // // Parameters: // - engine: The Gin engine instance. // - serviceType: The type of service (auth, file, or all). // - authHandler: The authentication handler (required for auth service). // - fileHandler: The file handler (required for file service). // - jwtSecret: The secret key for JWT token validation. // // Note: // - Authentication routes are public and don't require JWT. // - File routes require JWT authentication via middleware.JWT. // - Each service should only register its own routes to avoid conflicts. // // 参数: // - engine: Gin 引擎实例。 // - serviceType: 服务类型 (auth, file, 或 all)。 // - authHandler: 认证处理器(认证服务必需)。 // - fileHandler: 文件处理器(文件服务必需)。 // - jwtSecret: JWT 令牌验证的密钥。 // // 注意: // - 认证路由是公开的,不需要 JWT。 // - 文件路由需要通过 middleware.JWT 进行 JWT 认证。 // - 每个服务应该只注册自己的路由以避免冲突。 func SetupRoutes(engine *gin.Engine, serviceType ServiceType, authHandler *handler.AuthHandler, fileHandler *handler.FileHandler, captchaHandler *handler.CaptchaHandler, emailHandler *handler.EmailHandler, jwtSecret string) { api := engine.Group("/api/v1") RegisterCaptchaRoutes(api, captchaHandler) switch serviceType { case ServiceTypeAuth: auth := api.Group("/auth") RegisterAuthRoutes(auth, authHandler, emailHandler, jwtSecret) case ServiceTypeFile: files := api.Group("/files") files.Use(middleware.JWT(jwtSecret)) RegisterFileRoutes(files, fileHandler) case ServiceTypeAll: auth := api.Group("/auth") RegisterAuthRoutes(auth, authHandler, emailHandler, jwtSecret) files := api.Group("/files") files.Use(middleware.JWT(jwtSecret)) RegisterFileRoutes(files, fileHandler) } } // SetupAuthRoutes registers only authentication routes. // SetupAuthRoutes 只注册认证路由。 // // This function is used by the authentication service to register // only its own routes, avoiding conflicts with the file service. // // 此函数用于认证服务注册自己的路由,避免与文件服务冲突。 func SetupAuthRoutes(engine *gin.Engine, authHandler *handler.AuthHandler, captchaHandler *handler.CaptchaHandler, emailHandler *handler.EmailHandler, jwtSecret string) { api := engine.Group("/api/v1") RegisterCaptchaRoutes(api, captchaHandler) auth := api.Group("/auth") RegisterAuthRoutes(auth, authHandler, emailHandler, jwtSecret) } // SetupFileRoutes registers only file management routes. // SetupFileRoutes 只注册文件管理路由。 // // This function is used by the file service to register // only its own routes, avoiding conflicts with the auth service. // // 此函数用于文件服务注册自己的路由,避免与认证服务冲突。 func SetupFileRoutes(engine *gin.Engine, fileHandler *handler.FileHandler, captchaHandler *handler.CaptchaHandler, jwtSecret string) { api := engine.Group("/api/v1") RegisterCaptchaRoutes(api, captchaHandler) files := api.Group("/files") files.Use(middleware.JWT(jwtSecret)) RegisterFileRoutes(files, fileHandler) }