import { TeamStatistics } from '../aggregates'; export interface LeaderboardEntry { userId: bigint; score: number; rank: number; totalTeamCount: number; directReferralCount: number; } export interface LeaderboardQueryOptions { limit?: number; offset?: number; } /** * 团队统计仓储接口 */ export interface ITeamStatisticsRepository { /** * 保存团队统计 */ save(statistics: TeamStatistics): Promise; /** * 根据用户ID查找 */ findByUserId(userId: bigint): Promise; /** * 批量获取用户的团队统计 */ findByUserIds(userIds: bigint[]): Promise; /** * 获取龙虎榜排名 */ getLeaderboard(options?: LeaderboardQueryOptions): Promise; /** * 获取用户在龙虎榜的排名 */ getUserRank(userId: bigint): Promise; /** * 批量更新团队统计 (用于认种事件处理) */ batchUpdateTeamCounts( updates: Array<{ userId: bigint; countDelta: number; provinceCode: string; cityCode: string; fromDirectReferralId?: bigint; }>, ): Promise; /** * [纯新增] 批量更新团队统计(转让场景,支持负数 delta) * 与 batchUpdateTeamCounts 区别:负数 delta 时重新扫描所有直推找最大支线 */ batchUpdateTeamCountsForTransfer( updates: Array<{ userId: bigint; countDelta: number; provinceCode: string; cityCode: string; fromDirectReferralId?: bigint; }>, ): Promise; /** * 创建初始团队统计记录 */ create(userId: bigint, accountSequence: string): Promise; } export const TEAM_STATISTICS_REPOSITORY = Symbol('ITeamStatisticsRepository');