wip
This commit is contained in:
@@ -14,6 +14,7 @@ import type {
|
||||
RaceDetailEntryViewModel,
|
||||
RaceDetailUserResultViewModel,
|
||||
} from '../presenters/IRaceDetailPresenter';
|
||||
import type { UseCase } from '@gridpilot/shared/application/UseCase';
|
||||
|
||||
/**
|
||||
* Use Case: GetRaceDetailUseCase
|
||||
@@ -30,7 +31,9 @@ export interface GetRaceDetailQueryParams {
|
||||
driverId: string;
|
||||
}
|
||||
|
||||
export class GetRaceDetailUseCase {
|
||||
export class GetRaceDetailUseCase
|
||||
implements UseCase<GetRaceDetailQueryParams, RaceDetailViewModel, RaceDetailViewModel, IRaceDetailPresenter>
|
||||
{
|
||||
constructor(
|
||||
private readonly raceRepository: IRaceRepository,
|
||||
private readonly leagueRepository: ILeagueRepository,
|
||||
@@ -40,10 +43,11 @@ export class GetRaceDetailUseCase {
|
||||
private readonly leagueMembershipRepository: ILeagueMembershipRepository,
|
||||
private readonly driverRatingProvider: DriverRatingProvider,
|
||||
private readonly imageService: IImageServicePort,
|
||||
public readonly presenter: IRaceDetailPresenter,
|
||||
) {}
|
||||
|
||||
async execute(params: GetRaceDetailQueryParams): Promise<void> {
|
||||
async execute(params: GetRaceDetailQueryParams, presenter: IRaceDetailPresenter): Promise<void> {
|
||||
presenter.reset();
|
||||
|
||||
const { raceId, driverId } = params;
|
||||
|
||||
const race = await this.raceRepository.findById(raceId);
|
||||
@@ -59,7 +63,7 @@ export class GetRaceDetailUseCase {
|
||||
userResult: null,
|
||||
error: 'Race not found',
|
||||
};
|
||||
this.presenter.present(emptyViewModel);
|
||||
presenter.present(emptyViewModel);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -121,8 +125,8 @@ export class GetRaceDetailUseCase {
|
||||
sessionType: race.sessionType,
|
||||
status: race.status,
|
||||
strengthOfField: race.strengthOfField ?? null,
|
||||
registeredCount: race.registeredCount,
|
||||
maxParticipants: race.maxParticipants,
|
||||
...(race.registeredCount !== undefined ? { registeredCount: race.registeredCount } : {}),
|
||||
...(race.maxParticipants !== undefined ? { maxParticipants: race.maxParticipants } : {}),
|
||||
};
|
||||
|
||||
const leagueView: RaceDetailLeagueViewModel | null = league
|
||||
@@ -131,8 +135,12 @@ export class GetRaceDetailUseCase {
|
||||
name: league.name,
|
||||
description: league.description,
|
||||
settings: {
|
||||
maxDrivers: league.settings.maxDrivers,
|
||||
qualifyingFormat: league.settings.qualifyingFormat,
|
||||
...(league.settings.maxDrivers !== undefined
|
||||
? { maxDrivers: league.settings.maxDrivers }
|
||||
: {}),
|
||||
...(league.settings.qualifyingFormat !== undefined
|
||||
? { qualifyingFormat: league.settings.qualifyingFormat }
|
||||
: {}),
|
||||
},
|
||||
}
|
||||
: null;
|
||||
@@ -148,7 +156,7 @@ export class GetRaceDetailUseCase {
|
||||
userResult: userResultView,
|
||||
};
|
||||
|
||||
this.presenter.present(viewModel);
|
||||
presenter.present(viewModel);
|
||||
}
|
||||
|
||||
private calculateRatingChange(position: number): number {
|
||||
|
||||
Reference in New Issue
Block a user