refactor driver module (wip)
This commit is contained in:
@@ -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;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user