import type { ITeamMembershipRepository } from '../../domain/repositories/ITeamMembershipRepository'; import type { IDriverRepository } from '../../domain/repositories/IDriverRepository'; import type { IImageService } from '../../domain/services/IImageService'; import type { ITeamJoinRequestsPresenter } from '../presenters/ITeamJoinRequestsPresenter'; /** * Use Case for retrieving team join requests. * Orchestrates domain logic and delegates presentation to the presenter. */ export class GetTeamJoinRequestsUseCase { constructor( private readonly membershipRepository: ITeamMembershipRepository, private readonly driverRepository: IDriverRepository, private readonly imageService: IImageService, public readonly presenter: ITeamJoinRequestsPresenter, ) {} async execute(teamId: string): Promise { const requests = await this.membershipRepository.getJoinRequests(teamId); const driverNames: Record = {}; const avatarUrls: Record = {}; for (const request of requests) { const driver = await this.driverRepository.findById(request.driverId); if (driver) { driverNames[request.driverId] = driver.name; } avatarUrls[request.driverId] = this.imageService.getDriverAvatar(request.driverId); } this.presenter.present(requests, driverNames, avatarUrls); } }