28 lines
1.3 KiB
TypeScript
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);
|
|
}
|
|
} |