2026-07-06 12:43:40 +08:00

695 lines
35 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package httproutes
import (
"net/http"
"hyapp/services/gateway-service/internal/transport/http/httpkit"
)
const APIV1Prefix = "/api/v1"
type Wrapper func(http.HandlerFunc) http.Handler
type Config struct {
PublicWrap Wrapper
AuthWrap Wrapper
ProfileWrap Wrapper
Auth AuthHandlers
App AppHandlers
User UserHandlers
Manager ManagerHandlers
Room RoomHandlers
Message MessageHandlers
Task TaskHandlers
Level LevelHandlers
Achievement AchievementHandlers
Wallet WalletHandlers
VIP VIPHandlers
Game GameHandlers
}
type AuthHandlers struct {
LoginPassword http.HandlerFunc
SetPassword http.HandlerFunc
QuickCreateAccount http.HandlerFunc
LoginThirdParty http.HandlerFunc
RegisterThirdParty http.HandlerFunc
CheckThirdPartyRegistered http.HandlerFunc
RefreshToken http.HandlerFunc
Logout http.HandlerFunc
}
type AppHandlers struct {
ListRegistrationCountries http.HandlerFunc
ListLoginRiskBlockedCountries http.HandlerFunc
GetAppBootstrap http.HandlerFunc
ListH5Links http.HandlerFunc
ListExploreTabs http.HandlerFunc
ListAppBanners http.HandlerFunc
ListSplashScreens http.HandlerFunc
ListPopups http.HandlerFunc
GetAppVersion http.HandlerFunc
GetResourceGroup http.HandlerFunc
ListResourceShopItems http.HandlerFunc
PurchaseResourceShopItem http.HandlerFunc
ListGifts http.HandlerFunc
ListGiftTabs http.HandlerFunc
ListEmojiPacks http.HandlerFunc
IssueTencentIMUserSig http.HandlerFunc
IssueTencentRTCToken http.HandlerFunc
HandleTencentIMCallback http.HandlerFunc
HandleTencentRTCCallback http.HandlerFunc
UploadFile http.HandlerFunc
UploadAvatar http.HandlerFunc
UploadRegistrationAvatar http.HandlerFunc
ProxyEffectMedia http.HandlerFunc
HandlePushToken http.HandlerFunc
AppHeartbeat http.HandlerFunc
ReportAppEvents http.HandlerFunc
}
type UserHandlers struct {
ResolveDisplayUserID http.HandlerFunc
BatchUserProfiles http.HandlerFunc
BatchRoomDisplayProfiles http.HandlerFunc
GetMyOverview http.HandlerFunc
GetMyInviteOverview http.HandlerFunc
GetMyInviteReferrer http.HandlerFunc
SearchInviteReferrer http.HandlerFunc
BindInviteReferrer http.HandlerFunc
GetMyGiftWall http.HandlerFunc
GetMyIdentity http.HandlerFunc
GetMyHostIdentity http.HandlerFunc
GetMyRoleSummary http.HandlerFunc
SearchHostAgencies http.HandlerFunc
ApplyToHostAgency http.HandlerFunc
GetAgencyProfile http.HandlerFunc
ListAgencyRooms http.HandlerFunc
UpdateAgencyProfile http.HandlerFunc
GetHostCenterAgency http.HandlerFunc
GetHostCenterPlatformPolicy http.HandlerFunc
GetAgencyCenterOverview http.HandlerFunc
GetAgencyCenterPlatformPolicy http.HandlerFunc
ListAgencyCenterHosts http.HandlerFunc
ListAgencyCenterApplications http.HandlerFunc
ReviewAgencyCenterApplication http.HandlerFunc
RemoveAgencyCenterHost http.HandlerFunc
InviteAgencyCenterHost http.HandlerFunc
GetBDLeaderCenterOverview http.HandlerFunc
ListBDLeaderCenterBDs http.HandlerFunc
ListBDLeaderCenterAgencies http.HandlerFunc
InviteBDLeaderBD http.HandlerFunc
InviteBDLeaderAgency http.HandlerFunc
GetBDCenterOverview http.HandlerFunc
ListBDCenterAgencies http.HandlerFunc
InviteBDAgency http.HandlerFunc
ListMyRoleInvitations http.HandlerFunc
ProcessMyRoleInvitation http.HandlerFunc
CompleteMyOnboarding http.HandlerFunc
UpdateMyProfile http.HandlerFunc
UpdateMyProfileBackground http.HandlerFunc
UpdateMyContactInfo http.HandlerFunc
ChangeMyCountry http.HandlerFunc
ChangeMyDisplayUserID http.HandlerFunc
ApplyMyPrettyDisplayUserID http.HandlerFunc
ListAvailablePrettyDisplayIDs http.HandlerFunc
ApplyPrettyDisplayIDFromPool http.HandlerFunc
ListMyProfileVisitors http.HandlerFunc
ListMyFollowing http.HandlerFunc
ListMyFriends http.HandlerFunc
ListMyFriendApplications http.HandlerFunc
ListCPApplications http.HandlerFunc
AcceptCPApplication http.HandlerFunc
RejectCPApplication http.HandlerFunc
ListCPRelationships http.HandlerFunc
ListCPIntimacyLeaderboard http.HandlerFunc
BreakCPRelationship http.HandlerFunc
GetMyProfile http.HandlerFunc
GetUserProfile http.HandlerFunc
GetMyAppearance http.HandlerFunc
GetUserAppearance http.HandlerFunc
ListMyResources http.HandlerFunc
EquipMyResource http.HandlerFunc
UnequipMyResource http.HandlerFunc
UserSocialAction http.HandlerFunc
SubmitReport http.HandlerFunc
}
type ManagerHandlers struct {
ListManagerGrantResources http.HandlerFunc
GrantManagerResource http.HandlerFunc
LookupBusinessUsers http.HandlerFunc
GetManagerOverview http.HandlerFunc
SearchManagerUsers http.HandlerFunc
GrantManagerVIP http.HandlerFunc
ManagerBlocks http.HandlerFunc
ListManagerBlocks http.HandlerFunc
CreateManagerBlock http.HandlerFunc
UnblockManagerBlock http.HandlerFunc
SetManagerUserLevel http.HandlerFunc
CreateManagerBDLeader http.HandlerFunc
TransferManagerUserCountry http.HandlerFunc
}
type RoomHandlers struct {
GetMyRoom http.HandlerFunc
ListRoomFeeds http.HandlerFunc
ListRooms http.HandlerFunc
GetCurrentRoom http.HandlerFunc
GetRoomSnapshot http.HandlerFunc
GetRoomDetail http.HandlerFunc
GetRoomShare http.HandlerFunc
GetRoomShareLanding http.HandlerFunc
ListRoomOnlineUsers http.HandlerFunc
ListRoomBannedUsers http.HandlerFunc
GetRoomContributionRank http.HandlerFunc
GetRoomGiftPanel http.HandlerFunc
GetRoomRocket http.HandlerFunc
FollowRoom http.HandlerFunc
CreateRoom http.HandlerFunc
UpdateRoomProfile http.HandlerFunc
SaveRoomBackground http.HandlerFunc
ListRoomBackgrounds http.HandlerFunc
SetRoomBackground http.HandlerFunc
JoinRoom http.HandlerFunc
RoomHeartbeat http.HandlerFunc
LeaveRoom http.HandlerFunc
CloseRoom http.HandlerFunc
MicUp http.HandlerFunc
MicDown http.HandlerFunc
ChangeMicSeat http.HandlerFunc
ConfirmMicPublishing http.HandlerFunc
MicHeartbeat http.HandlerFunc
SetMicMute http.HandlerFunc
SetMicSeatLock http.HandlerFunc
SetChatEnabled http.HandlerFunc
SetRoomPassword http.HandlerFunc
SetRoomAdmin http.HandlerFunc
MuteUser http.HandlerFunc
KickUser http.HandlerFunc
UnbanUser http.HandlerFunc
SendGift http.HandlerFunc
SendGiftBatch http.HandlerFunc
}
type MessageHandlers struct {
ListMessageTabs http.HandlerFunc
MarkInboxSectionRead http.HandlerFunc
MarkInboxMessageReadPath http.HandlerFunc
DeleteInboxMessagePath http.HandlerFunc
ListInboxMessages http.HandlerFunc
AcceptActionConfirm http.HandlerFunc
RejectActionConfirm http.HandlerFunc
BatchActionConfirmStatus http.HandlerFunc
ListActionConfirms http.HandlerFunc
}
type TaskHandlers struct {
ListTaskTabs http.HandlerFunc
ClaimTaskReward http.HandlerFunc
GetRegistrationRewardEligibility http.HandlerFunc
GetFirstRechargeRewardStatus http.HandlerFunc
GetCumulativeRechargeRewardStatus http.HandlerFunc
GetInviteActivityRewardStatus http.HandlerFunc
ClaimInviteActivityReward http.HandlerFunc
ListInviteActivityLeaderboard http.HandlerFunc
GetSevenDayCheckInStatus http.HandlerFunc
SignSevenDayCheckIn http.HandlerFunc
ListUserLeaderboards http.HandlerFunc
CheckLuckyGift http.HandlerFunc
GetRoomTurnoverRewardStatus http.HandlerFunc
GetWeeklyStarCurrent http.HandlerFunc
ListWeeklyStarLeaderboard http.HandlerFunc
ListWeeklyStarHistory http.HandlerFunc
GetCPWeeklyRankStatus http.HandlerFunc
GetAgencyOpeningStatus http.HandlerFunc
ApplyAgencyOpening http.HandlerFunc
ListAgencyOpeningLeaderboard http.HandlerFunc
GetWheelConfig http.HandlerFunc
DrawWheel http.HandlerFunc
ListWheelHistory http.HandlerFunc
ListWheelHints http.HandlerFunc
}
type LevelHandlers struct {
GetMyLevelOverview http.HandlerFunc
GetLevelTrack http.HandlerFunc
ListLevelRewards http.HandlerFunc
}
type AchievementHandlers struct {
ListAchievements http.HandlerFunc
ListMyBadges http.HandlerFunc
SetBadgeDisplay http.HandlerFunc
}
type WalletHandlers struct {
GetWalletOverview http.HandlerFunc
GetMyBalances http.HandlerFunc
ListRechargeProducts http.HandlerFunc
GetH5RechargeContext http.HandlerFunc
ListH5RechargeOptions http.HandlerFunc
CreateH5RechargeOrder http.HandlerFunc
ListTemporaryPayMethods http.HandlerFunc
CreateTemporaryPayLink http.HandlerFunc
GetTemporaryPayLink http.HandlerFunc
ListTemporaryPayLinks http.HandlerFunc
SubmitH5RechargeTx http.HandlerFunc
GetH5RechargeOrder http.HandlerFunc
HandleMifapayNotify http.HandlerFunc
HandleV5PayNotify http.HandlerFunc
ConfirmGooglePayment http.HandlerFunc
GetDiamondExchangeConfig http.HandlerFunc
ListCoinTransactions http.HandlerFunc
ListWalletTransactions http.HandlerFunc
ListCoinSellers http.HandlerFunc
TransferCoinFromSeller http.HandlerFunc
SendDirectGift http.HandlerFunc
GetSalaryWalletOverview http.HandlerFunc
GetSalaryWalletHistory http.HandlerFunc
SearchSalaryWalletSeller http.HandlerFunc
ExchangeSalaryToCoin http.HandlerFunc
TransferSalaryToSeller http.HandlerFunc
HandleSalaryWalletWithdrawAddress http.HandlerFunc
WithdrawSalaryWallet http.HandlerFunc
GetRedPacketConfig http.HandlerFunc
ListRoomRedPackets http.HandlerFunc
CreateRoomRedPacket http.HandlerFunc
GetRedPacket http.HandlerFunc
ClaimRedPacket http.HandlerFunc
GetCurrentRegionIMGroup http.HandlerFunc
GetRedPacketIMGroup http.HandlerFunc
SendVoiceRoomRedPacket http.HandlerFunc
ListActiveRedPackets http.HandlerFunc
ClaimVoiceRoomRedPacket http.HandlerFunc
GetVoiceRoomRedPacket http.HandlerFunc
ListRedPacketClaims http.HandlerFunc
ListSentRedPackets http.HandlerFunc
}
type VIPHandlers struct {
GetMyVIP http.HandlerFunc
ListVIPPackages http.HandlerFunc
PurchaseVIP http.HandlerFunc
}
type GameHandlers struct {
ListGames http.HandlerFunc
ListRecentGames http.HandlerFunc
ListExploreWinners http.HandlerFunc
GetBridgeScript http.HandlerFunc
LaunchGame http.HandlerFunc
GetDiceConfig http.HandlerFunc
MatchDice http.HandlerFunc
CreateDiceMatch http.HandlerFunc
JoinDiceMatch http.HandlerFunc
GetDiceMatch http.HandlerFunc
RollDiceMatch http.HandlerFunc
CancelDiceMatch http.HandlerFunc
GetRPSConfig http.HandlerFunc
MatchRPS http.HandlerFunc
CreateRPSMatch http.HandlerFunc
JoinRPSMatch http.HandlerFunc
GetRPSMatch http.HandlerFunc
RollRPSMatch http.HandlerFunc
CancelRPSMatch http.HandlerFunc
ReportSelfGameH5Event http.HandlerFunc
GetRoomRPSConfig http.HandlerFunc
ListRoomRPSChallenges http.HandlerFunc
CreateRoomRPSChallenge http.HandlerFunc
AcceptRoomRPSChallenge http.HandlerFunc
GetRoomRPSChallenge http.HandlerFunc
HandleCallback http.HandlerFunc
HandleZGameCallback http.HandlerFunc
HandleHotgameGetUserInfo http.HandlerFunc
HandleHotgameUpdateBalance http.HandlerFunc
}
type routes struct {
mux *http.ServeMux
config Config
}
// New 只维护 gateway 对外 HTTP 路径到 transport handler 的绑定。
// 业务状态和命令执行仍然全部下沉到 owner service路由层不承载业务规则。
func New(config Config) http.Handler {
mux := http.NewServeMux()
routes := routes{mux: mux, config: config}
routes.registerAuthRoutes()
routes.registerAppRoutes()
routes.registerUserRoutes()
routes.registerManagerRoutes()
routes.registerRoomRoutes()
routes.registerMessageRoutes()
routes.registerTaskRoutes()
routes.registerLevelRoutes()
routes.registerAchievementRoutes()
routes.registerWalletRoutes()
routes.registerVIPRoutes()
routes.registerGameRoutes()
return mux
}
func (r routes) public(path string, method string, next http.HandlerFunc) {
r.register(path, method, r.config.PublicWrap, next)
}
func (r routes) rootPublic(path string, method string, next http.HandlerFunc) {
r.registerRaw(path, method, r.config.PublicWrap, next)
}
func (r routes) auth(path string, method string, next http.HandlerFunc) {
r.register(path, method, r.config.AuthWrap, next)
}
func (r routes) profile(path string, method string, next http.HandlerFunc) {
r.register(path, method, r.config.ProfileWrap, next)
}
func (r routes) register(path string, method string, wrap Wrapper, next http.HandlerFunc) {
r.registerRaw(APIV1Prefix+path, method, wrap, next)
}
func (r routes) registerRaw(path string, method string, wrap Wrapper, next http.HandlerFunc) {
if method != "" {
// method 继续走 gateway envelope而不是使用 ServeMux 自动 405。
next = httpkit.RequireMethod(method, next)
}
r.mux.Handle(path, wrap(next))
}
func (r routes) registerAuthRoutes() {
h := r.config.Auth
r.public("/auth/account/login", "", h.LoginPassword)
r.auth("/auth/password/set", "", h.SetPassword)
r.public("/auth/account/quick-create", http.MethodPost, h.QuickCreateAccount)
r.public("/auth/third-party/login", "", h.LoginThirdParty)
r.public("/auth/third-party/register", http.MethodPost, h.RegisterThirdParty)
r.public("/auth/third-party/registered/check", http.MethodPost, h.CheckThirdPartyRegistered)
r.public("/auth/token/refresh", "", h.RefreshToken)
r.public("/auth/logout", "", h.Logout)
}
func (r routes) registerAppRoutes() {
h := r.config.App
r.public("/countries", "", h.ListRegistrationCountries)
r.public("/login-risk/blocked-countries", http.MethodGet, h.ListLoginRiskBlockedCountries)
r.public("/app/bootstrap", "", h.GetAppBootstrap)
r.public("/app/h5-links", "", h.ListH5Links)
r.public("/app/explore-tabs", http.MethodGet, h.ListExploreTabs)
r.public("/app/banners", "", h.ListAppBanners)
r.public("/app/splash-screens", http.MethodGet, h.ListSplashScreens)
r.public("/app/popups", http.MethodGet, h.ListPopups)
r.public("/app/version", http.MethodGet, h.GetAppVersion)
r.public("/resource-groups/{group_id}", "", h.GetResourceGroup)
r.public("/resource-shop/items", http.MethodGet, h.ListResourceShopItems)
r.profile("/resource-shop/items/{shop_item_id}/purchase", http.MethodPost, h.PurchaseResourceShopItem)
r.public("/gifts", "", h.ListGifts)
r.public("/gift-tabs", http.MethodGet, h.ListGiftTabs)
r.public("/emoji-packs", http.MethodGet, h.ListEmojiPacks)
r.profile("/im/usersig", http.MethodGet, h.IssueTencentIMUserSig)
r.profile("/rtc/token", http.MethodPost, h.IssueTencentRTCToken)
r.public("/tencent-im/callback", "", h.HandleTencentIMCallback)
r.public("/tencent-rtc/callback", "", h.HandleTencentRTCCallback)
r.auth("/files/upload", "", h.UploadFile)
r.auth("/files/avatar/upload", "", h.UploadAvatar)
r.public("/files/registration/avatar/upload", http.MethodPost, h.UploadRegistrationAvatar)
r.public("/media/effects/proxy", http.MethodGet, h.ProxyEffectMedia)
r.auth("/app/heartbeat", http.MethodPost, h.AppHeartbeat)
r.public("/app/events", http.MethodPost, h.ReportAppEvents)
r.profile("/devices/push-token", "", h.HandlePushToken)
}
func (r routes) registerUserRoutes() {
h := r.config.User
r.public("/users/by-display-user-id/{display_user_id}", "", h.ResolveDisplayUserID)
r.public("/users/by-id/{user_id}/profile", http.MethodGet, h.GetUserProfile)
r.public("/users/by-id/{user_id}/appearance", http.MethodGet, h.GetUserAppearance)
r.profile("/users/profiles:batch", "", h.BatchUserProfiles)
r.profile("/users/room-display-profiles:batch", http.MethodGet, h.BatchRoomDisplayProfiles)
r.profile("/users/me/overview", "", h.GetMyOverview)
r.profile("/users/me/invite-overview", http.MethodGet, h.GetMyInviteOverview)
r.profile("/users/me/invite-referrer", http.MethodGet, h.GetMyInviteReferrer)
r.profile("/users/me/invite-referrer/search", http.MethodGet, h.SearchInviteReferrer)
r.profile("/users/me/invite-referrer/bind", http.MethodPost, h.BindInviteReferrer)
r.profile("/users/me/gift-wall", http.MethodGet, h.GetMyGiftWall)
r.auth("/users/me/identity", "", h.GetMyIdentity)
r.profile("/users/me/host-identity", "", h.GetMyHostIdentity)
r.profile("/users/me/role-summary", "", h.GetMyRoleSummary)
r.profile("/host/agencies/search", http.MethodGet, h.SearchHostAgencies)
r.profile("/host/agency-applications", http.MethodPost, h.ApplyToHostAgency)
r.profile("/agencies/profile", http.MethodGet, h.GetAgencyProfile)
r.profile("/agencies/rooms", http.MethodGet, h.ListAgencyRooms)
r.profile("/agencies/profile/update", http.MethodPost, h.UpdateAgencyProfile)
r.profile("/host-center/agency", http.MethodGet, h.GetHostCenterAgency)
r.profile("/host-center/platform-policy", http.MethodGet, h.GetHostCenterPlatformPolicy)
r.profile("/agency-center/overview", http.MethodGet, h.GetAgencyCenterOverview)
r.profile("/agency-center/platform-policy", http.MethodGet, h.GetAgencyCenterPlatformPolicy)
r.profile("/agency-center/hosts", http.MethodGet, h.ListAgencyCenterHosts)
r.profile("/agency-center/applications", http.MethodGet, h.ListAgencyCenterApplications)
r.profile("/agency-center/applications/{application_id}/review", http.MethodPost, h.ReviewAgencyCenterApplication)
r.profile("/agency-center/hosts/{host_user_id}/remove", http.MethodPost, h.RemoveAgencyCenterHost)
r.profile("/agency-center/invitations/host", http.MethodPost, h.InviteAgencyCenterHost)
r.profile("/bd-leader-center/overview", http.MethodGet, h.GetBDLeaderCenterOverview)
r.profile("/bd-leader-center/bds", http.MethodGet, h.ListBDLeaderCenterBDs)
r.profile("/bd-leader-center/agencies", http.MethodGet, h.ListBDLeaderCenterAgencies)
r.profile("/bd-leader/invitations/bd", http.MethodPost, h.InviteBDLeaderBD)
r.profile("/bd-leader/invitations/agency", http.MethodPost, h.InviteBDLeaderAgency)
r.profile("/bd-center/overview", http.MethodGet, h.GetBDCenterOverview)
r.profile("/bd-center/agencies", http.MethodGet, h.ListBDCenterAgencies)
r.profile("/bd/invitations/agency", http.MethodPost, h.InviteBDAgency)
r.profile("/role-invitations", http.MethodGet, h.ListMyRoleInvitations)
r.profile("/role-invitations/{invitation_id}/process", http.MethodPost, h.ProcessMyRoleInvitation)
r.auth("/users/me/onboarding/complete", "", h.CompleteMyOnboarding)
r.profile("/users/me/profile/update", "", h.UpdateMyProfile)
r.profile("/users/me/profile-bg-img", http.MethodPost, h.UpdateMyProfileBackground)
r.profile("/users/me/contact-info", http.MethodPost, h.UpdateMyContactInfo)
r.profile("/users/me/country/change", "", h.ChangeMyCountry)
r.auth("/users/me/display-id/change", "", h.ChangeMyDisplayUserID)
r.auth("/users/me/display-id/pretty/apply", "", h.ApplyMyPrettyDisplayUserID)
r.auth("/users/pretty-ids/available", http.MethodGet, h.ListAvailablePrettyDisplayIDs)
r.auth("/users/pretty-ids/apply", http.MethodPost, h.ApplyPrettyDisplayIDFromPool)
r.profile("/users/me/visitors", http.MethodGet, h.ListMyProfileVisitors)
r.profile("/users/me/following", http.MethodGet, h.ListMyFollowing)
r.profile("/users/me/friends", http.MethodGet, h.ListMyFriends)
r.profile("/users/me/friend-requests", http.MethodGet, h.ListMyFriendApplications)
r.profile("/cp/applications", http.MethodGet, h.ListCPApplications)
r.profile("/cp/applications/{application_id}/accept", http.MethodPost, h.AcceptCPApplication)
r.profile("/cp/applications/{application_id}/reject", http.MethodPost, h.RejectCPApplication)
r.profile("/cp/relationships", http.MethodGet, h.ListCPRelationships)
r.profile("/cp/intimacy-leaderboard", http.MethodGet, h.ListCPIntimacyLeaderboard)
r.profile("/cp/relationships/{relationship_id}/break", http.MethodPost, h.BreakCPRelationship)
r.profile("/appearance", http.MethodGet, h.GetMyAppearance)
r.profile("/users/me/appearance", http.MethodGet, h.GetMyAppearance)
r.profile("/users/me", "", h.GetMyProfile)
r.profile("/users/me/resources", "", h.ListMyResources)
r.profile("/users/me/resources/{resource_id}/equip", "", h.EquipMyResource)
r.profile("/users/me/resources/{resource_type}/unequip", http.MethodDelete, h.UnequipMyResource)
r.profile("/reports", http.MethodPost, h.SubmitReport)
r.profile("/users/{user_id}/{action...}", "", h.UserSocialAction)
}
func (r routes) registerManagerRoutes() {
h := r.config.Manager
r.profile("/manager-center/overview", http.MethodGet, h.GetManagerOverview)
r.profile("/manager-center/users/search", http.MethodGet, h.SearchManagerUsers)
r.profile("/manager-center/resource-grants/resources", http.MethodGet, h.ListManagerGrantResources)
r.profile("/manager-center/resource-grants", http.MethodPost, h.GrantManagerResource)
r.profile("/manager-center/vip-grants", http.MethodPost, h.GrantManagerVIP)
r.profile("/manager-center/blocks", "", h.ManagerBlocks)
r.profile("/manager-center/blocks/{block_id}/unblock", http.MethodPost, h.UnblockManagerBlock)
r.profile("/manager-center/levels", http.MethodPost, h.SetManagerUserLevel)
r.profile("/manager-center/bd-leaders", http.MethodPost, h.CreateManagerBDLeader)
r.profile("/manager-center/users/country", http.MethodPost, h.TransferManagerUserCountry)
r.profile("/business/users/lookup", http.MethodGet, h.LookupBusinessUsers)
}
func (r routes) registerRoomRoutes() {
h := r.config.Room
r.rootPublic("/share/rooms/{room_id}", http.MethodGet, h.GetRoomShareLanding)
r.profile("/rooms/me", http.MethodGet, h.GetMyRoom)
r.profile("/rooms/feeds", http.MethodGet, h.ListRoomFeeds)
r.profile("/rooms", http.MethodGet, h.ListRooms)
r.profile("/rooms/current", http.MethodGet, h.GetCurrentRoom)
r.profile("/rooms/snapshot", http.MethodGet, h.GetRoomSnapshot)
r.profile("/rooms/{room_id}/detail", http.MethodGet, h.GetRoomDetail)
r.profile("/rooms/{room_id}/share", http.MethodGet, h.GetRoomShare)
r.profile("/rooms/{room_id}/online-users", http.MethodGet, h.ListRoomOnlineUsers)
r.profile("/rooms/{room_id}/banned-users", http.MethodGet, h.ListRoomBannedUsers)
r.profile("/rooms/{room_id}/contribution-rank", http.MethodGet, h.GetRoomContributionRank)
r.profile("/rooms/{room_id}/gift-panel", http.MethodGet, h.GetRoomGiftPanel)
r.profile("/rooms/{room_id}/rocket", http.MethodGet, h.GetRoomRocket)
r.profile("/rooms/{room_id}/follow", "", h.FollowRoom)
r.profile("/rooms/{room_id}/backgrounds", http.MethodGet, h.ListRoomBackgrounds)
r.profile("/rooms/create", http.MethodPost, h.CreateRoom)
r.profile("/rooms/profile/update", http.MethodPost, h.UpdateRoomProfile)
r.profile("/rooms/backgrounds/save", http.MethodPost, h.SaveRoomBackground)
r.profile("/rooms/backgrounds/set", http.MethodPost, h.SetRoomBackground)
r.profile("/rooms/join", http.MethodPost, h.JoinRoom)
r.profile("/rooms/heartbeat", http.MethodPost, h.RoomHeartbeat)
r.profile("/rooms/leave", http.MethodPost, h.LeaveRoom)
r.profile("/rooms/close", http.MethodPost, h.CloseRoom)
r.profile("/rooms/mic/up", http.MethodPost, h.MicUp)
r.profile("/rooms/mic/down", http.MethodPost, h.MicDown)
r.profile("/rooms/mic/change", http.MethodPost, h.ChangeMicSeat)
r.profile("/rooms/mic/publishing/confirm", http.MethodPost, h.ConfirmMicPublishing)
r.profile("/rooms/mic/heartbeat", http.MethodPost, h.MicHeartbeat)
r.profile("/rooms/mic/mute", http.MethodPost, h.SetMicMute)
r.profile("/rooms/mic/lock", http.MethodPost, h.SetMicSeatLock)
r.profile("/rooms/chat/enabled", http.MethodPost, h.SetChatEnabled)
r.profile("/rooms/password", http.MethodPost, h.SetRoomPassword)
r.profile("/rooms/admin/set", http.MethodPost, h.SetRoomAdmin)
r.profile("/rooms/user/mute", http.MethodPost, h.MuteUser)
r.profile("/rooms/user/kick", http.MethodPost, h.KickUser)
r.profile("/rooms/user/unban", http.MethodPost, h.UnbanUser)
r.profile("/rooms/gift/send", http.MethodPost, h.SendGift)
r.profile("/rooms/gift/batch-send", http.MethodPost, h.SendGiftBatch)
}
func (r routes) registerMessageRoutes() {
h := r.config.Message
r.profile("/messages/tabs", "", h.ListMessageTabs)
r.profile("/messages/read-all", "", h.MarkInboxSectionRead)
r.profile("/messages/{message_id}/read", "", h.MarkInboxMessageReadPath)
r.profile("/messages/{message_id}", "", h.DeleteInboxMessagePath)
r.profile("/message/action-confirms/{confirm_id}/accept", http.MethodPost, h.AcceptActionConfirm)
r.profile("/message/action-confirms/{confirm_id}/reject", http.MethodPost, h.RejectActionConfirm)
r.profile("/message/action-confirms/status", http.MethodPost, h.BatchActionConfirmStatus)
r.profile("/message/action-confirms", http.MethodGet, h.ListActionConfirms)
r.profile("/messages", "", h.ListInboxMessages)
}
func (r routes) registerTaskRoutes() {
h := r.config.Task
r.profile("/activities/registration-reward/eligibility", http.MethodGet, h.GetRegistrationRewardEligibility)
r.profile("/activities/first-recharge-reward", http.MethodGet, h.GetFirstRechargeRewardStatus)
r.profile("/activities/cumulative-recharge-reward", http.MethodGet, h.GetCumulativeRechargeRewardStatus)
r.profile("/activities/invite-reward", http.MethodGet, h.GetInviteActivityRewardStatus)
r.profile("/activities/invite-reward/leaderboard", http.MethodGet, h.ListInviteActivityLeaderboard)
r.profile("/activities/invite-reward/claim", http.MethodPost, h.ClaimInviteActivityReward)
r.profile("/activities/seven-day-checkin", http.MethodGet, h.GetSevenDayCheckInStatus)
r.profile("/activities/seven-day-checkin/sign", http.MethodPost, h.SignSevenDayCheckIn)
r.profile("/activities/user-leaderboards", http.MethodGet, h.ListUserLeaderboards)
r.profile("/activities/room-turnover-reward", http.MethodGet, h.GetRoomTurnoverRewardStatus)
r.profile("/activities/weekly-star/current", http.MethodGet, h.GetWeeklyStarCurrent)
r.profile("/activities/weekly-star/leaderboard", http.MethodGet, h.ListWeeklyStarLeaderboard)
r.profile("/activities/weekly-star/history", http.MethodGet, h.ListWeeklyStarHistory)
r.profile("/activities/cp-weekly-rank", http.MethodGet, h.GetCPWeeklyRankStatus)
r.profile("/activities/agency-opening-event", http.MethodGet, h.GetAgencyOpeningStatus)
r.profile("/activities/agency-opening-event/apply", http.MethodPost, h.ApplyAgencyOpening)
r.profile("/activities/agency-opening-event/leaderboard", http.MethodGet, h.ListAgencyOpeningLeaderboard)
r.public("/activity/wheel/{wheel_id}/config", http.MethodGet, h.GetWheelConfig)
r.profile("/activity/wheel/{wheel_id}/draw", http.MethodPost, h.DrawWheel)
r.profile("/activity/wheel/{wheel_id}/history", http.MethodPost, h.ListWheelHistory)
r.profile("/activity/wheel/{wheel_id}/hints", http.MethodPost, h.ListWheelHints)
// App 侧接口保持稳定;内部仍按 pool_id 走当前 v2 规则、抽奖和返奖实现。
r.profile("/activities/lucky-gifts/check", http.MethodPost, h.CheckLuckyGift)
r.profile("/tasks/tabs", http.MethodGet, h.ListTaskTabs)
r.profile("/tasks/claim", http.MethodPost, h.ClaimTaskReward)
}
func (r routes) registerLevelRoutes() {
h := r.config.Level
r.profile("/levels/me/overview", http.MethodGet, h.GetMyLevelOverview)
r.profile("/levels/tracks/{track}", http.MethodGet, h.GetLevelTrack)
r.profile("/levels/rewards", http.MethodGet, h.ListLevelRewards)
}
func (r routes) registerAchievementRoutes() {
h := r.config.Achievement
r.public("/achievements", http.MethodGet, h.ListAchievements)
r.profile("/badges/me", http.MethodGet, h.ListMyBadges)
r.profile("/badges/display", http.MethodPost, h.SetBadgeDisplay)
}
func (r routes) registerWalletRoutes() {
h := r.config.Wallet
r.profile("/wallet/me/overview", http.MethodGet, h.GetWalletOverview)
r.profile("/wallet/me/balances", "", h.GetMyBalances)
r.profile("/wallet/recharge/products", http.MethodGet, h.ListRechargeProducts)
r.public("/recharge/h5/context", http.MethodGet, h.GetH5RechargeContext)
r.public("/recharge/h5/options", http.MethodGet, h.ListH5RechargeOptions)
r.public("/recharge/h5/orders", http.MethodPost, h.CreateH5RechargeOrder)
r.public("/recharge/h5/temporary/methods", http.MethodGet, h.ListTemporaryPayMethods)
r.public("/recharge/h5/temporary/orders", http.MethodPost, h.CreateTemporaryPayLink)
r.public("/recharge/h5/temporary/order-list", http.MethodGet, h.ListTemporaryPayLinks)
r.public("/recharge/h5/temporary/orders/{order_id}", http.MethodGet, h.GetTemporaryPayLink)
r.public("/recharge/h5/orders/{order_id}/tx", http.MethodPost, h.SubmitH5RechargeTx)
r.public("/recharge/h5/orders/{order_id}", http.MethodGet, h.GetH5RechargeOrder)
r.public("/payment/mifapay/notify", http.MethodPost, h.HandleMifapayNotify)
r.public("/payment/v5pay/notify", http.MethodPost, h.HandleV5PayNotify)
r.profile("/wallet/payments/google/confirm", http.MethodPost, h.ConfirmGooglePayment)
r.profile("/wallet/diamond-exchange/config", http.MethodGet, h.GetDiamondExchangeConfig)
r.profile("/wallet/coin-transactions", http.MethodGet, h.ListCoinTransactions)
r.profile("/wallet/transactions", http.MethodGet, h.ListWalletTransactions)
r.profile("/wallet/coin-sellers", http.MethodGet, h.ListCoinSellers)
r.profile("/wallet/coin-seller/transfer", "", h.TransferCoinFromSeller)
r.profile("/messages/direct-gifts/send", http.MethodPost, h.SendDirectGift)
r.profile("/salary-wallet/overview", http.MethodGet, h.GetSalaryWalletOverview)
r.profile("/salary-wallet/history", http.MethodGet, h.GetSalaryWalletHistory)
r.profile("/salary-wallet/coin-sellers/search", http.MethodGet, h.SearchSalaryWalletSeller)
r.profile("/salary-wallet/exchange", http.MethodPost, h.ExchangeSalaryToCoin)
r.profile("/salary-wallet/transfer-to-coin-seller", http.MethodPost, h.TransferSalaryToSeller)
r.profile("/salary-wallet/withdraw-address", "", h.HandleSalaryWalletWithdrawAddress)
r.profile("/salary-wallet/withdraw", http.MethodPost, h.WithdrawSalaryWallet)
r.profile("/red-packets/config", http.MethodGet, h.GetRedPacketConfig)
r.profile("/rooms/{room_id}/red-packets", http.MethodGet, h.ListRoomRedPackets)
r.profile("/rooms/{room_id}/red-packets/create", http.MethodPost, h.CreateRoomRedPacket)
r.profile("/red-packets/{packet_id}", http.MethodGet, h.GetRedPacket)
r.profile("/red-packets/{packet_id}/claim", http.MethodPost, h.ClaimRedPacket)
r.profile("/app/region-im-group/current", http.MethodGet, h.GetCurrentRegionIMGroup)
r.profile("/app/voice-room/red-packet/im-group", http.MethodGet, h.GetRedPacketIMGroup)
r.profile("/app/voice-room/red-packet/config", http.MethodGet, h.GetRedPacketConfig)
r.profile("/app/voice-room/red-packet/send", http.MethodPost, h.SendVoiceRoomRedPacket)
r.profile("/app/voice-room/red-packet/active", http.MethodGet, h.ListActiveRedPackets)
r.profile("/app/voice-room/red-packet/claim", http.MethodPost, h.ClaimVoiceRoomRedPacket)
r.profile("/app/voice-room/red-packet/detail", http.MethodGet, h.GetVoiceRoomRedPacket)
r.profile("/app/voice-room/red-packet/claim-records", http.MethodGet, h.ListRedPacketClaims)
r.profile("/app/voice-room/red-packet/sent-records", http.MethodGet, h.ListSentRedPackets)
}
func (r routes) registerVIPRoutes() {
h := r.config.VIP
r.profile("/vip/me", http.MethodGet, h.GetMyVIP)
r.profile("/vip/packages", http.MethodGet, h.ListVIPPackages)
r.profile("/vip/purchase", http.MethodPost, h.PurchaseVIP)
}
func (r routes) registerGameRoutes() {
h := r.config.Game
r.profile("/games", http.MethodGet, h.ListGames)
r.profile("/games/recent", http.MethodGet, h.ListRecentGames)
r.profile("/games/explore-winners", http.MethodGet, h.ListExploreWinners)
r.profile("/games/bridge-script", http.MethodGet, h.GetBridgeScript)
r.profile("/games/{game_id}/launch", http.MethodPost, h.LaunchGame)
r.profile("/games/dice/config", http.MethodGet, h.GetDiceConfig)
r.profile("/games/dice/match", http.MethodPost, h.MatchDice)
r.profile("/games/dice/matches", http.MethodPost, h.CreateDiceMatch)
r.profile("/games/dice/matches/{match_id}/join", http.MethodPost, h.JoinDiceMatch)
r.profile("/games/dice/matches/{match_id}", http.MethodGet, h.GetDiceMatch)
r.profile("/games/dice/matches/{match_id}/roll", http.MethodPost, h.RollDiceMatch)
r.profile("/games/dice/matches/{match_id}/cancel", http.MethodPost, h.CancelDiceMatch)
r.profile("/games/rps/config", http.MethodGet, h.GetRPSConfig)
r.profile("/games/rps/match", http.MethodPost, h.MatchRPS)
r.profile("/games/rps/matches", http.MethodPost, h.CreateRPSMatch)
r.profile("/games/rps/matches/{match_id}/join", http.MethodPost, h.JoinRPSMatch)
r.profile("/games/rps/matches/{match_id}", http.MethodGet, h.GetRPSMatch)
r.profile("/games/rps/matches/{match_id}/roll", http.MethodPost, h.RollRPSMatch)
r.profile("/games/rps/matches/{match_id}/cancel", http.MethodPost, h.CancelRPSMatch)
r.profile("/games/self/report-events", http.MethodPost, h.ReportSelfGameH5Event)
r.profile("/games/room-rps/config", http.MethodGet, h.GetRoomRPSConfig)
r.profile("/games/room-rps/challenges", http.MethodGet, h.ListRoomRPSChallenges)
// 当前 ServeMux 包装按 path 注册,不能把 GET 列表和 POST 创建同时挂在 /challenges创建动作单独放 /create避免路由覆盖。
r.profile("/games/room-rps/challenges/create", http.MethodPost, h.CreateRoomRPSChallenge)
r.profile("/games/room-rps/challenges/{challenge_id}", http.MethodGet, h.GetRoomRPSChallenge)
// 应战只挂在具体 challenge 下,保证客户端必须拿到服务端生成的挑战单 ID 才能进入锁单流程。
r.profile("/games/room-rps/challenges/{challenge_id}/accept", http.MethodPost, h.AcceptRoomRPSChallenge)
// 热游后台只能配置根路径回调;这里仍复用 public wrapper让请求日志、request_id 和 app_code 解析保持一致。
r.rootPublic("/getUserInfo", http.MethodPost, h.HandleHotgameGetUserInfo)
r.rootPublic("/updateBalance", http.MethodPost, h.HandleHotgameUpdateBalance)
r.public("/zgame/callback/{operation...}", http.MethodPost, h.HandleZGameCallback)
r.public("/game-callbacks/{platform_code}/{operation}", http.MethodPost, h.HandleCallback)
}