import type { ITeamRepository } from '../../domain/repositories/ITeamRepository'; import type { ITeamMembershipRepository } from '../../domain/repositories/ITeamMembershipRepository'; import type { IDriverTeamPresenter, DriverTeamResultDTO, DriverTeamViewModel, } from '../presenters/IDriverTeamPresenter'; import type { UseCase } from '@gridpilot/shared/application'; /** * Use Case for retrieving a driver's team. * Orchestrates domain logic and delegates presentation to the presenter. */ export class GetDriverTeamUseCase implements UseCase<{ driverId: string }, DriverTeamResultDTO, DriverTeamViewModel, IDriverTeamPresenter> { constructor( private readonly teamRepository: ITeamRepository, private readonly membershipRepository: ITeamMembershipRepository, // Kept for backward compatibility; callers must pass their own presenter. // eslint-disable-next-line @typescript-eslint/no-unused-vars public readonly presenter: IDriverTeamPresenter, ) {} async execute(input: { driverId: string }, presenter: IDriverTeamPresenter): Promise { presenter.reset(); const membership = await this.membershipRepository.getActiveMembershipForDriver(input.driverId); if (!membership) { return; } const team = await this.teamRepository.findById(membership.teamId); if (!team) { return; } const dto: DriverTeamResultDTO = { team, membership, driverId: input.driverId, }; presenter.present(dto); } }