package router import ( "context" "net/http" "chatapp3-golang/internal/config" "chatapp3-golang/internal/repo" "chatapp3-golang/internal/service/baishun" "chatapp3-golang/internal/service/gameopen" "chatapp3-golang/internal/service/gameprovider" "chatapp3-golang/internal/service/hostcenter" "chatapp3-golang/internal/service/invite" "chatapp3-golang/internal/service/lingxian" "chatapp3-golang/internal/service/luckygift" "chatapp3-golang/internal/service/rechargeagency" "chatapp3-golang/internal/service/rechargereward" "chatapp3-golang/internal/service/registerreward" "chatapp3-golang/internal/service/roomturnoverreward" "chatapp3-golang/internal/service/signinreward" "chatapp3-golang/internal/service/vip" "chatapp3-golang/internal/service/weekstar" "github.com/gin-gonic/gin" ) // Services 聚合所有业务模块服务,供路由层统一装配。 type Services struct { Invite *invite.InviteService Baishun *baishun.BaishunService Lingxian *lingxian.Service GameOpen *gameopen.GameOpenService GameProviders *gameprovider.Registry LuckyGift *luckygift.LuckyGiftService HostCenter *hostcenter.Service RechargeAgency *rechargeagency.Service RechargeReward *rechargereward.Service RegisterReward *registerreward.RegisterRewardService RoomTurnoverReward *roomturnoverreward.Service SignInReward *signinreward.SignInRewardService VIP *vip.Service WeekStar *weekstar.WeekStarService } // NewRouter 创建 Gin 路由,并按模块注册所有接口。 func NewRouter( cfg config.Config, repository *repo.Repository, javaClient authGateway, services Services, ) *gin.Engine { engine := gin.New() engine.Use(gin.Logger(), gin.Recovery(), corsMiddleware()) registerHealthRoutes(engine, cfg, repository) registerInviteRoutes(engine, javaClient, services.Invite) registerRechargeAgencyRoutes(engine, javaClient, services.RechargeAgency) registerRechargeRewardRoutes(engine, javaClient, services.RechargeReward) registerRegisterRewardRoutes(engine, javaClient, services.RegisterReward) registerSignInRewardRoutes(engine, javaClient, services.SignInReward) registerVipRoutes(engine, javaClient, services.VIP) registerWeekStarRoutes(engine, javaClient, services.WeekStar) registerRoomTurnoverRewardRoutes(engine, javaClient, services.RoomTurnoverReward) registerHostCenterRoutes(engine, services.HostCenter) registerGameOpenRoutes(engine, cfg, services.GameOpen) registerGameProviderRoutes(engine, javaClient, services.GameProviders) registerBaishunRoutes(engine, cfg, javaClient, services.Baishun) registerLingxianRoutes(engine, javaClient, services.Lingxian) registerLuckyGiftRoutes(engine, cfg, services.LuckyGift) return engine } func corsMiddleware() gin.HandlerFunc { return func(c *gin.Context) { origin := c.GetHeader("Origin") if origin == "" { origin = "*" } c.Header("Access-Control-Allow-Origin", origin) c.Header("Access-Control-Allow-Methods", "GET,POST,PUT,PATCH,DELETE,OPTIONS") c.Header("Access-Control-Allow-Headers", "Authorization,Content-Type,Origin,Accept,req-lang,req-client,req-imei,req-app-intel,req-sys-origin,req-zone,X-Requested-With") c.Header("Access-Control-Expose-Headers", "Authorization") c.Header("Access-Control-Max-Age", "86400") if c.Request.Method == http.MethodOptions { c.AbortWithStatus(http.StatusNoContent) return } c.Next() } } // registerHealthRoutes 注册健康检查接口。 func registerHealthRoutes(engine *gin.Engine, cfg config.Config, repository *repo.Repository) { engine.GET("/health", func(c *gin.Context) { ctx, cancel := context.WithTimeout(c.Request.Context(), cfg.HTTP.Timeout) defer cancel() if err := repository.Ping(ctx); err != nil { c.JSON(http.StatusServiceUnavailable, gin.H{ "code": "dependency_unavailable", "message": err.Error(), }) return } c.JSON(http.StatusOK, gin.H{"code": "ok", "message": "success4"}) }) }