refactor driver module (wip)

This commit is contained in:
2025-12-22 10:24:40 +01:00
parent e7dbec4a85
commit 9da528d5bd
108 changed files with 842 additions and 947 deletions

View File

@@ -1,4 +1,3 @@
import type { Result } from '@core/shared/application/Result';
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
import type {
GetRaceResultsDetailResult,
@@ -16,33 +15,20 @@ export type GetRaceResultsDetailApplicationError = ApplicationErrorCode<
>;
export class RaceResultsDetailPresenter {
private model: GetRaceResultsDetailResponseModel | null = null;
private result: GetRaceResultsDetailResult | null = null;
constructor(private readonly imageService: IImageServicePort) {}
reset(): void {
this.model = null;
present(result: GetRaceResultsDetailResult): void {
this.result = result;
}
async present(
result: Result<GetRaceResultsDetailResult, GetRaceResultsDetailApplicationError>,
): Promise<void> {
if (result.isErr()) {
const error = result.unwrapErr();
if (error.code === 'RACE_NOT_FOUND') {
this.model = {
raceId: '',
track: '',
results: [],
} as RaceResultsDetailDTO;
return;
}
throw new Error(error.details?.message ?? 'Failed to get race results detail');
async getResponseModel(): Promise<GetRaceResultsDetailResponseModel | null> {
if (!this.result) {
return null;
}
const output = result.unwrap();
const output = this.result;
const driverMap = new Map(output.drivers.map(driver => [driver.id, driver]));
@@ -70,22 +56,17 @@ export class RaceResultsDetailPresenter {
}),
);
this.model = {
return {
raceId: output.race.id,
track: output.race.track,
results,
} as RaceResultsDetailDTO;
}
getResponseModel(): GetRaceResultsDetailResponseModel | null {
return this.model;
}
get responseModel(): GetRaceResultsDetailResponseModel {
if (!this.model) {
throw new Error('Presenter not presented');
}
return this.model;
get viewModel(): Promise<GetRaceResultsDetailResponseModel> {
return this.getResponseModel().then(model => {
if (!model) throw new Error('Presenter not presented');
return model;
});
}
}