import type { TeamJoinRequest } from '@gridpilot/racing/domain/entities/Team'; import type { ITeamJoinRequestsPresenter, TeamJoinRequestViewModel, TeamJoinRequestsViewModel, } from '@gridpilot/racing/application/presenters/ITeamJoinRequestsPresenter'; export class TeamJoinRequestsPresenter implements ITeamJoinRequestsPresenter { private viewModel: TeamJoinRequestsViewModel | null = null; present( requests: TeamJoinRequest[], driverNames: Record, avatarUrls: Record ): TeamJoinRequestsViewModel { const requestItems: TeamJoinRequestViewModel[] = requests.map((request) => ({ requestId: request.id, driverId: request.driverId, driverName: driverNames[request.driverId] ?? 'Unknown Driver', teamId: request.teamId, status: request.status, requestedAt: request.requestedAt.toISOString(), avatarUrl: avatarUrls[request.driverId] ?? '', })); const pendingCount = requestItems.filter((r) => r.status === 'pending').length; this.viewModel = { requests: requestItems, pendingCount, totalCount: requestItems.length, }; return this.viewModel; } getViewModel(): TeamJoinRequestsViewModel { if (!this.viewModel) { throw new Error('Presenter has not been called yet'); } return this.viewModel; } }