Files
gridpilot.gg/core/racing/application/use-cases/GetLeagueStatsUseCase.ts
2025-12-16 11:52:26 +01:00

28 lines
1.3 KiB
TypeScript

import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository';
import type { IRaceRepository } from '../../domain/repositories/IRaceRepository';
import type { ILeagueStatsPresenter, LeagueStatsResultDTO, LeagueStatsViewModel } from '../presenters/ILeagueStatsPresenter';
import type { UseCase } from '@core/shared/application/UseCase';
export interface GetLeagueStatsUseCaseParams {
leagueId: string;
}
export class GetLeagueStatsUseCase implements UseCase<GetLeagueStatsUseCaseParams, LeagueStatsResultDTO, LeagueStatsViewModel, ILeagueStatsPresenter> {
constructor(
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly raceRepository: IRaceRepository,
) {}
async execute(params: GetLeagueStatsUseCaseParams, presenter: ILeagueStatsPresenter): Promise<void> {
const memberships = await this.leagueMembershipRepository.getLeagueMembers(params.leagueId);
const races = await this.raceRepository.findByLeagueId(params.leagueId);
// TODO: Implement average rating calculation from driver ratings
const dto: LeagueStatsResultDTO = {
totalMembers: memberships.length,
totalRaces: races.length,
averageRating: 0,
};
presenter.reset();
presenter.present(dto);
}
}