Files
gridpilot.gg/core/racing/application/use-cases/GetLeagueMembershipsUseCase.ts
2025-12-16 18:17:48 +01:00

35 lines
1.4 KiB
TypeScript

import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository';
import type { IDriverRepository } from '../../domain/repositories/IDriverRepository';
import type { AsyncUseCase } from '@core/shared/application';
import { Result } from '@core/shared/result/Result';
import type { GetLeagueMembershipsResultDTO } from '../dto/GetLeagueMembershipsResultDTO';
export interface GetLeagueMembershipsUseCaseParams {
leagueId: string;
}
export class GetLeagueMembershipsUseCase implements AsyncUseCase<GetLeagueMembershipsUseCaseParams, Result<GetLeagueMembershipsResultDTO, never>> {
constructor(
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
private readonly driverRepository: IDriverRepository,
) {}
async execute(params: GetLeagueMembershipsUseCaseParams): Promise<Result<GetLeagueMembershipsResultDTO, never>> {
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,
};
return Result.ok(dto);
}
}