import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository'; import type { IDriverRepository } from '../../domain/repositories/IDriverRepository'; import type { LeagueMembership } from '../../domain/entities/LeagueMembership'; import type { IGetLeagueMembershipsPresenter, GetLeagueMembershipsViewModel } from '../presenters/IGetLeagueMembershipsPresenter'; import type { UseCase } from '@core/shared/application/UseCase'; export interface GetLeagueMembershipsUseCaseParams { leagueId: string; } export interface GetLeagueMembershipsResultDTO { memberships: LeagueMembership[]; drivers: { id: string; name: string }[]; } export class GetLeagueMembershipsUseCase implements UseCase { constructor( private readonly leagueMembershipRepository: ILeagueMembershipRepository, private readonly driverRepository: IDriverRepository, ) {} async execute(params: GetLeagueMembershipsUseCaseParams, presenter: IGetLeagueMembershipsPresenter): Promise { const memberships = await this.leagueMembershipRepository.getLeagueMembers(params.leagueId); const drivers: { id: string; name: string }[] = []; // Get driver details for each membership for (const membership of memberships) { const driver = await this.driverRepository.findById(membership.driverId); if (driver) { drivers.push({ id: driver.id, name: driver.name }); } } const dto: GetLeagueMembershipsResultDTO = { memberships, drivers, }; presenter.reset(); presenter.present(dto); } }