wip
This commit is contained in:
@@ -8,6 +8,7 @@ import type {
|
||||
RaceResultsDetailViewModel,
|
||||
RaceResultsPenaltySummaryViewModel,
|
||||
} from '../presenters/IRaceResultsDetailPresenter';
|
||||
import type { UseCase } from '@gridpilot/shared/application/UseCase';
|
||||
import type { League } from '../../domain/entities/League';
|
||||
import type { Result } from '../../domain/entities/Result';
|
||||
import type { Driver } from '../../domain/entities/Driver';
|
||||
@@ -18,8 +19,8 @@ export interface GetRaceResultsDetailParams {
|
||||
driverId?: string;
|
||||
}
|
||||
|
||||
function buildPointsSystem(league: League | null): Record<number, number> {
|
||||
if (!league) return {};
|
||||
function buildPointsSystem(league: League | null): Record<number, number> | undefined {
|
||||
if (!league) return undefined;
|
||||
|
||||
const pointsSystems: Record<string, Record<number, number>> = {
|
||||
'f1-2024': {
|
||||
@@ -53,11 +54,17 @@ function buildPointsSystem(league: League | null): Record<number, number> {
|
||||
},
|
||||
};
|
||||
|
||||
return (
|
||||
league.settings.customPoints ||
|
||||
pointsSystems[league.settings.pointsSystem] ||
|
||||
pointsSystems['f1-2024']
|
||||
);
|
||||
const customPoints = league.settings.customPoints;
|
||||
if (customPoints) {
|
||||
return customPoints;
|
||||
}
|
||||
|
||||
const preset = pointsSystems[league.settings.pointsSystem];
|
||||
if (preset) {
|
||||
return preset;
|
||||
}
|
||||
|
||||
return pointsSystems['f1-2024'];
|
||||
}
|
||||
|
||||
function getFastestLapTime(results: Result[]): number | undefined {
|
||||
@@ -73,17 +80,28 @@ function mapPenaltySummary(penalties: Penalty[]): RaceResultsPenaltySummaryViewM
|
||||
}));
|
||||
}
|
||||
|
||||
export class GetRaceResultsDetailUseCase {
|
||||
export class GetRaceResultsDetailUseCase
|
||||
implements
|
||||
UseCase<
|
||||
GetRaceResultsDetailParams,
|
||||
RaceResultsDetailViewModel,
|
||||
RaceResultsDetailViewModel,
|
||||
IRaceResultsDetailPresenter
|
||||
>
|
||||
{
|
||||
constructor(
|
||||
private readonly raceRepository: IRaceRepository,
|
||||
private readonly leagueRepository: ILeagueRepository,
|
||||
private readonly resultRepository: IResultRepository,
|
||||
private readonly driverRepository: IDriverRepository,
|
||||
private readonly penaltyRepository: IPenaltyRepository,
|
||||
public readonly presenter: IRaceResultsDetailPresenter,
|
||||
) {}
|
||||
|
||||
async execute(params: GetRaceResultsDetailParams): Promise<void> {
|
||||
async execute(
|
||||
params: GetRaceResultsDetailParams,
|
||||
presenter: IRaceResultsDetailPresenter,
|
||||
): Promise<void> {
|
||||
presenter.reset();
|
||||
const { raceId, driverId } = params;
|
||||
|
||||
const race = await this.raceRepository.findById(raceId);
|
||||
@@ -95,11 +113,10 @@ export class GetRaceResultsDetailUseCase {
|
||||
results: [],
|
||||
drivers: [],
|
||||
penalties: [],
|
||||
pointsSystem: {},
|
||||
currentDriverId: driverId,
|
||||
...(driverId ? { currentDriverId: driverId } : {}),
|
||||
error: 'Race not found',
|
||||
};
|
||||
this.presenter.present(errorViewModel);
|
||||
presenter.present(errorViewModel);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -111,12 +128,12 @@ export class GetRaceResultsDetailUseCase {
|
||||
]);
|
||||
|
||||
const effectiveCurrentDriverId =
|
||||
driverId || (drivers.length > 0 ? drivers[0]!.id : undefined);
|
||||
driverId ?? (drivers.length > 0 ? drivers[0]!.id : undefined);
|
||||
|
||||
const pointsSystem = buildPointsSystem(league as League | null);
|
||||
const fastestLapTime = getFastestLapTime(results);
|
||||
const penaltySummary = mapPenaltySummary(penalties);
|
||||
|
||||
|
||||
const viewModel: RaceResultsDetailViewModel = {
|
||||
race: {
|
||||
id: race.id,
|
||||
@@ -134,11 +151,11 @@ export class GetRaceResultsDetailUseCase {
|
||||
results,
|
||||
drivers,
|
||||
penalties: penaltySummary,
|
||||
pointsSystem,
|
||||
...(pointsSystem ? { pointsSystem } : {}),
|
||||
...(fastestLapTime !== undefined ? { fastestLapTime } : {}),
|
||||
currentDriverId: effectiveCurrentDriverId,
|
||||
...(effectiveCurrentDriverId ? { currentDriverId: effectiveCurrentDriverId } : {}),
|
||||
};
|
||||
|
||||
this.presenter.present(viewModel);
|
||||
presenter.present(viewModel);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user