refactor
This commit is contained in:
@@ -7,14 +7,15 @@ import type { ILeagueMembershipRepository } from '../../domain/repositories/ILea
|
||||
import type { DriverRatingProvider } from '../ports/DriverRatingProvider';
|
||||
import type { IImageServicePort } from '../ports/IImageServicePort';
|
||||
import type {
|
||||
IRaceDetailPresenter,
|
||||
RaceDetailViewModel,
|
||||
RaceDetailRaceViewModel,
|
||||
RaceDetailLeagueViewModel,
|
||||
RaceDetailEntryViewModel,
|
||||
RaceDetailUserResultViewModel,
|
||||
} from '../presenters/IRaceDetailPresenter';
|
||||
import type { UseCase } from '@core/shared/application/UseCase';
|
||||
import type { AsyncUseCase } from '@core/shared/application/AsyncUseCase';
|
||||
import { Result } from '@core/shared/application/Result';
|
||||
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
|
||||
|
||||
/**
|
||||
* Use Case: GetRaceDetailUseCase
|
||||
@@ -31,8 +32,10 @@ export interface GetRaceDetailQueryParams {
|
||||
driverId: string;
|
||||
}
|
||||
|
||||
type GetRaceDetailErrorCode = 'RACE_NOT_FOUND';
|
||||
|
||||
export class GetRaceDetailUseCase
|
||||
implements UseCase<GetRaceDetailQueryParams, RaceDetailViewModel, RaceDetailViewModel, IRaceDetailPresenter>
|
||||
implements AsyncUseCase<GetRaceDetailQueryParams, RaceDetailViewModel, GetRaceDetailErrorCode>
|
||||
{
|
||||
constructor(
|
||||
private readonly raceRepository: IRaceRepository,
|
||||
@@ -45,26 +48,12 @@ export class GetRaceDetailUseCase
|
||||
private readonly imageService: IImageServicePort,
|
||||
) {}
|
||||
|
||||
async execute(params: GetRaceDetailQueryParams, presenter: IRaceDetailPresenter): Promise<void> {
|
||||
presenter.reset();
|
||||
|
||||
async execute(params: GetRaceDetailQueryParams): Promise<Result<RaceDetailViewModel, ApplicationErrorCode<GetRaceDetailErrorCode>>> {
|
||||
const { raceId, driverId } = params;
|
||||
|
||||
const race = await this.raceRepository.findById(raceId);
|
||||
if (!race) {
|
||||
const emptyViewModel: RaceDetailViewModel = {
|
||||
race: null,
|
||||
league: null,
|
||||
entryList: [],
|
||||
registration: {
|
||||
isUserRegistered: false,
|
||||
canRegister: false,
|
||||
},
|
||||
userResult: null,
|
||||
error: 'Race not found',
|
||||
};
|
||||
presenter.present(emptyViewModel);
|
||||
return;
|
||||
return Result.err({ code: 'RACE_NOT_FOUND' });
|
||||
}
|
||||
|
||||
const [league, registeredDriverIds, membership] = await Promise.all([
|
||||
@@ -156,7 +145,7 @@ export class GetRaceDetailUseCase
|
||||
userResult: userResultView,
|
||||
};
|
||||
|
||||
presenter.present(viewModel);
|
||||
return Result.ok(viewModel);
|
||||
}
|
||||
|
||||
private calculateRatingChange(position: number): number {
|
||||
|
||||
Reference in New Issue
Block a user