156 lines
6.3 KiB
Go
156 lines
6.3 KiB
Go
package router
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"chatapp3-golang/internal/config"
|
|
"chatapp3-golang/internal/repo"
|
|
"chatapp3-golang/internal/service/apppopup"
|
|
"chatapp3-golang/internal/service/baishun"
|
|
"chatapp3-golang/internal/service/binancerecharge"
|
|
"chatapp3-golang/internal/service/errorlog"
|
|
"chatapp3-golang/internal/service/firstrechargereward"
|
|
"chatapp3-golang/internal/service/gameopen"
|
|
"chatapp3-golang/internal/service/gameprovider"
|
|
"chatapp3-golang/internal/service/hostcenter"
|
|
"chatapp3-golang/internal/service/hotgame"
|
|
"chatapp3-golang/internal/service/invite"
|
|
"chatapp3-golang/internal/service/lingxian"
|
|
"chatapp3-golang/internal/service/luckygift"
|
|
"chatapp3-golang/internal/service/managercenter"
|
|
"chatapp3-golang/internal/service/propsstore"
|
|
"chatapp3-golang/internal/service/rechargeagency"
|
|
"chatapp3-golang/internal/service/rechargereward"
|
|
"chatapp3-golang/internal/service/regionimgroup"
|
|
"chatapp3-golang/internal/service/registerreward"
|
|
"chatapp3-golang/internal/service/roomturnoverreward"
|
|
"chatapp3-golang/internal/service/signinreward"
|
|
"chatapp3-golang/internal/service/smashegg"
|
|
"chatapp3-golang/internal/service/taskcenter"
|
|
"chatapp3-golang/internal/service/userbadge"
|
|
"chatapp3-golang/internal/service/vip"
|
|
"chatapp3-golang/internal/service/voiceroomredpacket"
|
|
"chatapp3-golang/internal/service/voiceroomrocket"
|
|
"chatapp3-golang/internal/service/weekstar"
|
|
"chatapp3-golang/internal/service/wheel"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// Services 聚合所有业务模块服务,供路由层统一装配。
|
|
type Services struct {
|
|
AppPopup *apppopup.Service
|
|
ErrorLog *errorlog.Service
|
|
Invite *invite.InviteService
|
|
Baishun *baishun.BaishunService
|
|
BinanceRecharge *binancerecharge.Service
|
|
FirstRechargeReward *firstrechargereward.Service
|
|
Lingxian *lingxian.Service
|
|
GameOpen *gameopen.GameOpenService
|
|
GameProviders *gameprovider.Registry
|
|
GameVisibility *gameprovider.VisibilityPolicy
|
|
LuckyGift *luckygift.LuckyGiftService
|
|
ManagerCenter *managercenter.Service
|
|
PropsStore *propsstore.Service
|
|
HostCenter *hostcenter.Service
|
|
Hotgame *hotgame.Service
|
|
RechargeAgency *rechargeagency.Service
|
|
RechargeReward *rechargereward.Service
|
|
RegionIMGroup *regionimgroup.Service
|
|
RegisterReward *registerreward.RegisterRewardService
|
|
RoomTurnoverReward *roomturnoverreward.Service
|
|
SignInReward *signinreward.SignInRewardService
|
|
SmashEgg *smashegg.Service
|
|
TaskCenter *taskcenter.Service
|
|
UserBadge *userbadge.Service
|
|
VIP *vip.Service
|
|
Wheel *wheel.Service
|
|
VoiceRoomRedPacket *voiceroomredpacket.Service
|
|
VoiceRoomRocket *voiceroomrocket.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)
|
|
registerAppPopupRoutes(engine, javaClient, services.AppPopup)
|
|
registerAgoraErrorLogRoutes(engine, javaClient, services.ErrorLog)
|
|
registerInviteRoutes(engine, javaClient, services.Invite)
|
|
registerRechargeAgencyRoutes(engine, javaClient, services.RechargeAgency)
|
|
registerRechargeRewardRoutes(engine, javaClient, services.RechargeReward)
|
|
registerFirstRechargeRewardRoutes(engine, javaClient, services.FirstRechargeReward)
|
|
registerBinanceRechargeRoutes(engine, javaClient, services.BinanceRecharge)
|
|
registerRegisterRewardRoutes(engine, javaClient, services.RegisterReward)
|
|
registerSignInRewardRoutes(engine, javaClient, services.SignInReward)
|
|
registerTaskCenterRoutes(engine, cfg, javaClient, services.TaskCenter)
|
|
registerUserBadgeRoutes(engine, javaClient, services.UserBadge)
|
|
registerVipRoutes(engine, javaClient, services.VIP)
|
|
registerWheelRoutes(engine, cfg, javaClient, services.Wheel)
|
|
registerSmashEggRoutes(engine, javaClient, services.SmashEgg)
|
|
registerRegionIMGroupRoutes(engine, cfg, repository, javaClient, services.RegionIMGroup)
|
|
registerVoiceRoomRedPacketRoutes(engine, javaClient, services.VoiceRoomRedPacket)
|
|
registerVoiceRoomRocketRoutes(engine, cfg, javaClient, services.VoiceRoomRocket)
|
|
registerWeekStarRoutes(engine, javaClient, services.WeekStar)
|
|
registerRoomTurnoverRewardRoutes(engine, javaClient, services.RoomTurnoverReward)
|
|
registerHostCenterRoutes(engine, services.HostCenter)
|
|
registerGameOpenRoutes(engine, cfg, services.GameOpen)
|
|
registerGameProviderRoutes(engine, javaClient, services.GameProviders, services.GameVisibility)
|
|
registerBaishunRoutes(engine, cfg, javaClient, services.Baishun)
|
|
registerLingxianRoutes(engine, javaClient, services.Lingxian)
|
|
registerHotgameRoutes(engine, javaClient, services.Hotgame)
|
|
registerLuckyGiftRoutes(engine, cfg, services.LuckyGift)
|
|
registerManagerCenterRoutes(engine, javaClient, services.ManagerCenter)
|
|
registerPropsStoreRoutes(engine, javaClient, services.PropsStore)
|
|
|
|
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,sign,timestamp,token,req-lang,req-client,req-imei,req-app-intel,req-sys-origin,req-version,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"})
|
|
})
|
|
}
|