39 lines
1.1 KiB
TypeScript
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;
|
|
}
|
|
}
|