土耳其区域/IP 用户不再按财富等级隐藏游戏列表;保留 Evaluate 的 区域查询给 provider SQL 做 regions 过滤,删除 IP 国家解析器。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
58 lines
1.8 KiB
Go
58 lines
1.8 KiB
Go
package gameprovider
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"chatapp3-golang/internal/integration"
|
|
)
|
|
|
|
const gameListTargetSysOrigin = "LIKEI"
|
|
|
|
// VisibilityGateway 聚合游戏列表门禁需要的 Java 用户区域能力。
|
|
type VisibilityGateway interface {
|
|
GetUserRegion(ctx context.Context, userID int64, authorization string) (integration.UserRegion, error)
|
|
}
|
|
|
|
// VisibilityResult 返回门禁结果,并把已经查到的区域带回路由继续参与 SQL 过滤。
|
|
type VisibilityResult struct {
|
|
Allow bool
|
|
RegionID string
|
|
RegionCode string
|
|
}
|
|
|
|
// VisibilityPolicy 判断当前用户是否可以看到游戏列表。
|
|
type VisibilityPolicy struct {
|
|
java VisibilityGateway
|
|
targetSys string
|
|
}
|
|
|
|
// NewVisibilityPolicy 创建 LIKEI 游戏列表门禁:土耳其财富等级限制已下线,现在对所有区域直接展示,
|
|
// 保留 Evaluate 是因为路由仍依赖它查询用户区域给 provider SQL 做 regions 过滤。
|
|
func NewVisibilityPolicy(java VisibilityGateway) *VisibilityPolicy {
|
|
return &VisibilityPolicy{
|
|
java: java,
|
|
targetSys: gameListTargetSysOrigin,
|
|
}
|
|
}
|
|
|
|
// Evaluate 给 LIKEI 用户补齐区域信息并放行;非 LIKEI 用户沿用自带区域直接展示。
|
|
func (p *VisibilityPolicy) Evaluate(ctx context.Context, user AuthUser) (VisibilityResult, error) {
|
|
if p == nil || !strings.EqualFold(strings.TrimSpace(user.SysOrigin), p.targetSys) {
|
|
return VisibilityResult{Allow: true, RegionID: user.RegionID, RegionCode: user.RegionCode}, nil
|
|
}
|
|
if user.UserID <= 0 || p.java == nil {
|
|
return VisibilityResult{}, nil
|
|
}
|
|
|
|
region, err := p.java.GetUserRegion(ctx, user.UserID, user.Authorization)
|
|
if err != nil {
|
|
return VisibilityResult{}, err
|
|
}
|
|
return VisibilityResult{
|
|
Allow: true,
|
|
RegionID: strings.TrimSpace(region.RegionID),
|
|
RegionCode: strings.TrimSpace(region.RegionCode),
|
|
}, nil
|
|
}
|