Add persistent player leaderboards from game telemetry

This commit is contained in:
2026-09-18 16:43:44 -04:00
parent 0f55fa5f77
commit a182aeb950
16 changed files with 1135 additions and 17 deletions
+66
View File
@@ -0,0 +1,66 @@
export const leaderboardMetrics = [
{ key: 'highestRound', label: 'Highest round' },
{ key: 'kills', label: 'Total kills' },
{ key: 'roundsSurvived', label: 'Total rounds' },
{ key: 'headshots', label: 'Headshots' },
{ key: 'revives', label: 'Revives' },
{ key: 'downs', label: 'Downs' },
{ key: 'gamesPlayed', label: 'Games played' },
{ key: 'gamesCompleted', label: 'Games completed' },
{ key: 'bestKills', label: 'Best game kills' },
{ key: 'bestScore', label: 'Highest reported score' }
] as const;
export type LeaderboardMetric = typeof leaderboardMetrics[number]['key'];
export interface LeaderboardEntry {
rank: number;
game: string;
guid: string;
name: string;
highestRound: number;
kills: number;
roundsSurvived: number;
headshots: number;
revives: number;
downs: number;
gamesPlayed: number;
gamesCompleted: number;
bestKills: number;
bestScore: number;
lastSeen: string;
}
export interface LeaderboardMap {
key: string;
game: string;
map: string;
name: string;
}
export interface LeaderboardOptions {
game?: string;
map?: string;
metric?: LeaderboardMetric;
q?: string;
limit?: number;
offset?: number;
}
export interface LeaderboardResponse {
entries: LeaderboardEntry[];
maps: LeaderboardMap[];
total: number;
limit: number;
offset: number;
metric: LeaderboardMetric;
summary: {
players: number;
matches: number;
kills: number;
roundsSurvived: number;
highestRound: number;
firstTrackedAt: string | null;
updatedAt: string | null;
};
}