import type { IRaceRepository } from '../../domain/repositories/IRaceRepository'; import type { IGetLeagueSchedulePresenter, GetLeagueScheduleResultDTO, GetLeagueScheduleViewModel } from '../presenters/IGetLeagueSchedulePresenter'; import type { UseCase } from '@core/shared/application/UseCase'; export interface GetLeagueScheduleUseCaseParams { leagueId: string; } export interface GetLeagueScheduleResultDTO { races: Array<{ id: string; name: string; scheduledAt: Date; }>; } export class GetLeagueScheduleUseCase implements UseCase { constructor(private readonly raceRepository: IRaceRepository) {} async execute(params: GetLeagueScheduleUseCaseParams, presenter: IGetLeagueSchedulePresenter): Promise { const races = await this.raceRepository.findByLeagueId(params.leagueId); const dto: GetLeagueScheduleResultDTO = { races: races.map(race => ({ id: race.id, name: `${race.track} - ${race.car}`, scheduledAt: race.scheduledAt, })), }; presenter.reset(); presenter.present(dto); } }