import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository'; import type { IDriverRepository } from '../../domain/repositories/IDriverRepository'; import type { IGetLeagueJoinRequestsPresenter, GetLeagueJoinRequestsResultDTO, GetLeagueJoinRequestsViewModel } from '../presenters/IGetLeagueJoinRequestsPresenter'; import type { UseCase } from '@core/shared/application/UseCase'; export interface GetLeagueJoinRequestsUseCaseParams { leagueId: string; } export interface GetLeagueJoinRequestsResultDTO { joinRequests: unknown[]; drivers: { id: string; name: string }[]; } export class GetLeagueJoinRequestsUseCase implements UseCase { constructor( private readonly leagueMembershipRepository: ILeagueMembershipRepository, private readonly driverRepository: IDriverRepository, ) {} async execute(params: GetLeagueJoinRequestsUseCaseParams, presenter: IGetLeagueJoinRequestsPresenter): Promise { const joinRequests = await this.leagueMembershipRepository.getJoinRequests(params.leagueId); const driverIds = joinRequests.map(r => r.driverId); const drivers = await this.driverRepository.findByIds(driverIds); const driverMap = new Map(drivers.map(d => [d.id, { id: d.id, name: d.name }])); const dto: GetLeagueJoinRequestsResultDTO = { joinRequests, drivers: Array.from(driverMap.values()), }; presenter.reset(); presenter.present(dto); } }