package routes import ( "net/http" "github.com/gin-gonic/gin" "gorm.io/gorm" adminhandler "wx_service/internal/admin" authhandler "wx_service/internal/common/auth/handler" uploadhandler "wx_service/internal/common/upload/handler" rediscache "wx_service/internal/common/redis/cache" oahandler "wx_service/internal/common/wechat_official/handler" expiryhandler "wx_service/internal/expiry" lawyerhandler "wx_service/internal/lawyer/handler" marketinghandler "wx_service/internal/marketing/handler" membershiphandler "wx_service/internal/membership/handler" "wx_service/internal/middleware" quitcheckinhandler "wx_service/internal/quitcheckin/handler" rmhandler "wx_service/internal/remove_watermark/handler" smokehandler "wx_service/internal/smoke/handler" ) func Register( router *gin.Engine, db *gorm.DB, authHandler *authhandler.AuthHandler, videoHandler *rmhandler.VideoHandler, smokeHandler *smokehandler.SmokeHandler, quitPlanHandler *smokehandler.QuitPlanHandler, redeemCodeHandler *membershiphandler.RedeemCodeHandler, uploadHandler *uploadhandler.UploadHandler, oaOAuthHandler *oahandler.OAuthHandler, sessionCache *rediscache.SessionUserCache, lawyerHandler *lawyerhandler.LawyerHandler, expiryHandler *expiryhandler.Handler, adminHandler *adminhandler.Handler, adminToken string, marketingCategoryHandler *marketinghandler.CategoryHandler, marketingTemplateHandler *marketinghandler.TemplateHandler, marketingDownloadHandler *marketinghandler.DownloadHandler, marketingUserLogoHandler *marketinghandler.UserLogoHandler, quitCheckinHandler *quitcheckinhandler.Handler, ) { // Register 用来集中注册所有 HTTP 路由,便于工程结构更清晰: // - main 只负责初始化(配置/DB/依赖注入) // - routes 只负责把 URL 映射到 handler api := router.Group("/api/v1") { // 登录接口:用微信 code 换取/创建用户并返回 session_key(作为后续 Bearer Token) api.POST("/auth/login", authHandler.LoginWithWeChat) // H5 开发调试登录(仅 debug 模式可用) api.POST("/auth/dev-login", authHandler.DevLogin) // 公众号网页授权:不需要登录(code 本身来自微信授权回调) registerWeChatOfficialRoutes(api, oaOAuthHandler) registerCommonPublicRoutes(api, uploadHandler) if lawyerHandler != nil { api.POST("/lawyers", lawyerHandler.Create) } // 需要登录的接口组:统一挂载鉴权中间件 protected := api.Group("") protected.Use(middleware.AuthMiddleware(db, sessionCache)) protected.Use(middleware.RequireUserMiddleware()) { registerCommonRoutes(protected, uploadHandler) registerRemoveWatermarkRoutes(api, protected, videoHandler) registerMembershipRoutes(protected, redeemCodeHandler) registerSmokeRoutes(protected, smokeHandler, quitPlanHandler) } registerMarketingRoutes(api, protected, adminToken, marketingCategoryHandler, marketingTemplateHandler, marketingDownloadHandler, marketingUserLogoHandler) } apiV2 := router.Group("/api/v2") { protectedV2 := apiV2.Group("") protectedV2.Use(middleware.AuthMiddleware(db, sessionCache)) protectedV2.Use(middleware.RequireUserMiddleware()) { registerQuitCheckinRoutes(protectedV2, quitCheckinHandler) } } registerAdminRoutes(router, adminHandler, marketingCategoryHandler, marketingTemplateHandler, marketingDownloadHandler) // 保质期提醒模块使用独立前缀 /api/expiry,与现有 /api/v1 并存。 expiryAPI := router.Group("/api/expiry") { expiryAPI.GET("/healthz", expiryHandler.Healthz) expiryProtected := expiryAPI.Group("") expiryProtected.Use(middleware.AuthMiddleware(db, sessionCache)) expiryProtected.Use(middleware.RequireUserMiddleware()) { registerExpiryRoutes(expiryProtected, expiryHandler) } } // 健康检查:用于容器/负载均衡探活 router.GET("/healthz", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"status": "ok"}) }) }