rwadurian/backend/services/referral-service/src/domain/repositories/team-statistics.repository....

79 lines
1.8 KiB
TypeScript
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.

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<TeamStatistics>;
/**
* 根据用户ID查找
*/
findByUserId(userId: bigint): Promise<TeamStatistics | null>;
/**
* 批量获取用户的团队统计
*/
findByUserIds(userIds: bigint[]): Promise<TeamStatistics[]>;
/**
* 获取龙虎榜排名
*/
getLeaderboard(options?: LeaderboardQueryOptions): Promise<LeaderboardEntry[]>;
/**
* 获取用户在龙虎榜的排名
*/
getUserRank(userId: bigint): Promise<number | null>;
/**
* 批量更新团队统计 (用于认种事件处理)
*/
batchUpdateTeamCounts(
updates: Array<{
userId: bigint;
countDelta: number;
provinceCode: string;
cityCode: string;
fromDirectReferralId?: bigint;
}>,
): Promise<void>;
/**
* [纯新增] 批量更新团队统计(转让场景,支持负数 delta
* 与 batchUpdateTeamCounts 区别:负数 delta 时重新扫描所有直推找最大支线
*/
batchUpdateTeamCountsForTransfer(
updates: Array<{
userId: bigint;
countDelta: number;
provinceCode: string;
cityCode: string;
fromDirectReferralId?: bigint;
}>,
): Promise<void>;
/**
* 创建初始团队统计记录
*/
create(userId: bigint, accountSequence: string): Promise<TeamStatistics>;
}
export const TEAM_STATISTICS_REPOSITORY = Symbol('ITeamStatisticsRepository');