Files
gridpilot.gg/core/racing/application/use-cases/GetLeagueMembershipsUseCase.ts
2025-12-16 11:52:26 +01:00

41 lines
1.7 KiB
TypeScript

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<GetLeagueMembershipsUseCaseParams, GetLeagueMembershipsResultDTO, GetLeagueMembershipsViewModel, IGetLeagueMembershipsPresenter> {
constructor(
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly driverRepository: IDriverRepository,
) {}
async execute(params: GetLeagueMembershipsUseCaseParams, presenter: IGetLeagueMembershipsPresenter): Promise<void> {
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);
}
}