215 lines
7.2 KiB
Go

package integration
import (
"context"
"chatapp3-golang/internal/config"
)
// Gateways 聚合按职责拆分后的 Java 接口网关。
type Gateways struct {
Auth *AuthGateway
Device *DeviceGateway
InviteCode *InviteCodeGateway
Notice *NoticeGateway
RewardDispatch *RewardDispatchGateway
RewardQuery *RewardQueryGateway
Profile *ProfileGateway
Wallet *WalletGateway
}
// NewGateways 基于共享 HTTP 客户端创建所有 Java 网关。
func NewGateways(cfg config.Config) Gateways {
client := New(cfg)
return Gateways{
Auth: &AuthGateway{client: client},
Device: &DeviceGateway{client: client},
InviteCode: &InviteCodeGateway{client: client},
Notice: &NoticeGateway{client: client},
RewardDispatch: &RewardDispatchGateway{client: client},
RewardQuery: &RewardQueryGateway{client: client},
Profile: &ProfileGateway{client: client},
Wallet: &WalletGateway{client: client},
}
}
// AuthenticateToken 透传到认证网关。
func (g *Gateways) AuthenticateToken(ctx context.Context, token string) (UserCredential, error) {
return g.Auth.AuthenticateToken(ctx, token)
}
// AuthenticateConsoleToken 透传到后台认证网关。
func (g *Gateways) AuthenticateConsoleToken(ctx context.Context, authorization string) (ConsoleAccount, error) {
return g.Auth.AuthenticateConsoleToken(ctx, authorization)
}
// GetDeviceFingerprint 透传到设备网关。
func (g *Gateways) GetDeviceFingerprint(ctx context.Context, userID int64) (string, error) {
return g.Device.GetDeviceFingerprint(ctx, userID)
}
// EnsureInviteCode 透传到邀请码网关。
func (g *Gateways) EnsureInviteCode(ctx context.Context, authorization string) (InviteCode, error) {
return g.InviteCode.EnsureInviteCode(ctx, authorization)
}
// SendOfficialNoticeCustomize 透传到官方通知网关。
func (g *Gateways) SendOfficialNoticeCustomize(ctx context.Context, req OfficialNoticeCustomizeRequest) error {
return g.Notice.SendOfficialNoticeCustomize(ctx, req)
}
// GrantGold 透传到奖励发放网关。
func (g *Gateways) GrantGold(ctx context.Context, req GrantGoldRequest) error {
return g.RewardDispatch.GrantGold(ctx, req)
}
// GrantProps 透传到奖励发放网关。
func (g *Gateways) GrantProps(ctx context.Context, req GrantPropsRequest) error {
return g.RewardDispatch.GrantProps(ctx, req)
}
// SendActivityReward 透传到奖励发放网关。
func (g *Gateways) SendActivityReward(ctx context.Context, req SendActivityRewardRequest) error {
return g.RewardDispatch.SendActivityReward(ctx, req)
}
// GetRewardGroupDetail 透传到奖励查询网关。
func (g *Gateways) GetRewardGroupDetail(ctx context.Context, groupID int64) (RewardGroupDetail, error) {
return g.RewardQuery.GetRewardGroupDetail(ctx, groupID)
}
// GetUserProfile 透传到资料网关。
func (g *Gateways) GetUserProfile(ctx context.Context, userID int64) (UserProfile, error) {
return g.Profile.GetUserProfile(ctx, userID)
}
// GetUserLanguage 透传到资料网关。
func (g *Gateways) GetUserLanguage(ctx context.Context, userID int64) (string, error) {
return g.Profile.GetUserLanguage(ctx, userID)
}
// MapGoldBalance 透传到钱包网关。
func (g *Gateways) MapGoldBalance(ctx context.Context, userIDs []int64) (map[int64]int64, error) {
return g.Wallet.MapGoldBalance(ctx, userIDs)
}
// ExistsGoldEvent 透传到钱包网关。
func (g *Gateways) ExistsGoldEvent(ctx context.Context, eventID string) (bool, error) {
return g.Wallet.ExistsGoldEvent(ctx, eventID)
}
// ChangeGoldBalance 透传到钱包网关。
func (g *Gateways) ChangeGoldBalance(ctx context.Context, cmd GoldReceiptCommand) error {
return g.Wallet.ChangeGoldBalance(ctx, cmd)
}
// AuthGateway 负责认证相关接口。
type AuthGateway struct {
client *Client
}
// AuthenticateToken 校验用户 token。
func (g *AuthGateway) AuthenticateToken(ctx context.Context, token string) (UserCredential, error) {
return g.client.AuthenticateToken(ctx, token)
}
// AuthenticateConsoleToken 校验后台 console token。
func (g *AuthGateway) AuthenticateConsoleToken(ctx context.Context, authorization string) (ConsoleAccount, error) {
return g.client.AuthenticateConsoleToken(ctx, authorization)
}
// DeviceGateway 负责设备指纹相关接口。
type DeviceGateway struct {
client *Client
}
// GetDeviceFingerprint 查询设备指纹。
func (g *DeviceGateway) GetDeviceFingerprint(ctx context.Context, userID int64) (string, error) {
return g.client.GetDeviceFingerprint(ctx, userID)
}
// InviteCodeGateway 负责邀请码相关接口。
type InviteCodeGateway struct {
client *Client
}
// EnsureInviteCode 确保用户存在邀请码。
func (g *InviteCodeGateway) EnsureInviteCode(ctx context.Context, authorization string) (InviteCode, error) {
return g.client.EnsureInviteCode(ctx, authorization)
}
// NoticeGateway 负责实时官方通知接口。
type NoticeGateway struct {
client *Client
}
// SendOfficialNoticeCustomize 发送自定义官方通知。
func (g *NoticeGateway) SendOfficialNoticeCustomize(ctx context.Context, req OfficialNoticeCustomizeRequest) error {
return g.client.SendOfficialNoticeCustomize(ctx, req)
}
// RewardDispatchGateway 负责活动奖励发放接口。
type RewardDispatchGateway struct {
client *Client
}
// GrantGold 发放金币奖励。
func (g *RewardDispatchGateway) GrantGold(ctx context.Context, req GrantGoldRequest) error {
return g.client.GrantGold(ctx, req)
}
// GrantProps 发放道具奖励。
func (g *RewardDispatchGateway) GrantProps(ctx context.Context, req GrantPropsRequest) error {
return g.client.GrantProps(ctx, req)
}
// SendActivityReward 发放活动奖励组。
func (g *RewardDispatchGateway) SendActivityReward(ctx context.Context, req SendActivityRewardRequest) error {
return g.client.SendActivityReward(ctx, req)
}
// RewardQueryGateway 负责奖励配置查询接口。
type RewardQueryGateway struct {
client *Client
}
// GetRewardGroupDetail 查询奖励组详情。
func (g *RewardQueryGateway) GetRewardGroupDetail(ctx context.Context, groupID int64) (RewardGroupDetail, error) {
return g.client.GetRewardGroupDetail(ctx, groupID)
}
// ProfileGateway 负责用户资料相关接口。
type ProfileGateway struct {
client *Client
}
// GetUserProfile 查询用户资料。
func (g *ProfileGateway) GetUserProfile(ctx context.Context, userID int64) (UserProfile, error) {
return g.client.GetUserProfile(ctx, userID)
}
// GetUserLanguage 查询用户语言。
func (g *ProfileGateway) GetUserLanguage(ctx context.Context, userID int64) (string, error) {
return g.client.GetUserLanguage(ctx, userID)
}
// WalletGateway 负责钱包相关接口。
type WalletGateway struct {
client *Client
}
// MapGoldBalance 批量查询金币余额。
func (g *WalletGateway) MapGoldBalance(ctx context.Context, userIDs []int64) (map[int64]int64, error) {
return g.client.MapGoldBalance(ctx, userIDs)
}
// ExistsGoldEvent 查询事件幂等是否存在。
func (g *WalletGateway) ExistsGoldEvent(ctx context.Context, eventID string) (bool, error) {
return g.client.ExistsGoldEvent(ctx, eventID)
}
// ChangeGoldBalance 修改金币余额。
func (g *WalletGateway) ChangeGoldBalance(ctx context.Context, cmd GoldReceiptCommand) error {
return g.client.ChangeGoldBalance(ctx, cmd)
}