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 }