34 lines
1.4 KiB
TypeScript
34 lines
1.4 KiB
TypeScript
import type { IRaceRepository } from '../../domain/repositories/IRaceRepository';
|
|
import type { ILeagueRepository } from '../../domain/repositories/ILeagueRepository';
|
|
import type { IGetAllRacesPresenter, GetAllRacesResultDTO, AllRacesPageViewModel } from '../presenters/IGetAllRacesPresenter';
|
|
import type { UseCase } from '@core/shared/application/UseCase';
|
|
|
|
export interface GetAllRacesUseCaseParams {}
|
|
|
|
export class GetAllRacesUseCase implements UseCase<GetAllRacesUseCaseParams, GetAllRacesResultDTO, AllRacesPageViewModel, IGetAllRacesPresenter> {
|
|
constructor(
|
|
private readonly raceRepository: IRaceRepository,
|
|
private readonly leagueRepository: ILeagueRepository,
|
|
) {}
|
|
|
|
async execute(params: GetAllRacesUseCaseParams, presenter: IGetAllRacesPresenter): Promise<void> {
|
|
const races = await this.raceRepository.findAll();
|
|
const leagues = await this.leagueRepository.findAll();
|
|
const leagueMap = new Map(leagues.map(league => [league.id, league.name]));
|
|
|
|
const raceViewModels = races.map(race => ({
|
|
id: race.id,
|
|
name: `Race ${race.id}`, // Placeholder, adjust based on domain
|
|
date: race.scheduledAt.toISOString(),
|
|
leagueName: leagueMap.get(race.leagueId) || 'Unknown League',
|
|
}));
|
|
|
|
const dto: GetAllRacesResultDTO = {
|
|
races: raceViewModels,
|
|
totalCount: races.length,
|
|
};
|
|
|
|
presenter.reset();
|
|
presenter.present(dto);
|
|
}
|
|
} |