Files
gridpilot.gg/adapters/racing/services/InMemoryRankingService.ts
2025-12-30 00:15:35 +01:00

39 lines
1.1 KiB
TypeScript

import type { IRankingService, DriverRanking } from '@core/racing/domain/services/IRankingService';
import type { Logger } from '@core/shared/application';
import { DriverStatsStore } from './DriverStatsStore';
export class InMemoryRankingService implements IRankingService {
constructor(private readonly logger: Logger) {
this.logger.info('InMemoryRankingService initialized.');
}
getAllDriverRankings(): DriverRanking[] {
this.logger.debug('[InMemoryRankingService] Getting all driver rankings.');
// Get stats from the DriverStatsStore
const statsStore = DriverStatsStore.getInstance();
const allStats = statsStore.getAllStats();
// Convert stats to rankings
const rankings: DriverRanking[] = [];
allStats.forEach((stats, driverId) => {
rankings.push({
driverId,
rating: stats.rating,
overallRank: stats.overallRank ?? 0,
});
});
// Sort by rating descending to get proper rankings
rankings.sort((a, b) => b.rating - a.rating);
// Assign ranks
rankings.forEach((ranking, index) => {
ranking.overallRank = index + 1;
});
return rankings;
}
}