This commit is contained in:
2025-12-21 22:35:38 +01:00
parent 3c64f328e2
commit 9bd2e630e6
38 changed files with 736 additions and 684 deletions

View File

@@ -14,7 +14,7 @@ import { GetTotalDriversUseCase } from '@core/racing/application/use-cases/GetTo
import { CompleteDriverOnboardingUseCase } from '@core/racing/application/use-cases/CompleteDriverOnboardingUseCase';
import { IsDriverRegisteredForRaceUseCase } from '@core/racing/application/use-cases/IsDriverRegisteredForRaceUseCase';
import { GetProfileOverviewUseCase } from '@core/racing/application/use-cases/GetProfileOverviewUseCase';
import { UpdateDriverProfileUseCase } from '@core/racing/application/use-cases/UpdateDriverProfileUseCase';
import { UpdateDriverProfileUseCase, type UpdateDriverProfileInput } from '@core/racing/application/use-cases/UpdateDriverProfileUseCase';
// Presenters
import { DriverStatsPresenter } from './presenters/DriverStatsPresenter';
@@ -70,10 +70,12 @@ export class DriverService {
const result = await this.getDriversLeaderboardUseCase.execute({});
const presenter = new DriversLeaderboardPresenter();
presenter.present(result);
if (result.isErr()) {
const error = result.unwrapErr();
throw new Error(error.details?.message ?? 'Failed to load drivers leaderboard');
}
return presenter.getResponseModel();
return this.driversLeaderboardPresenter.getResponseModel();
}
async getTotalDrivers(): Promise<DriverStatsDTO> {
@@ -101,14 +103,15 @@ export class DriverService {
lastName: input.lastName,
displayName: input.displayName,
country: input.country,
timezone: input.timezone,
bio: input.bio,
...(input.bio !== undefined ? { bio: input.bio } : {}),
});
const presenter = new CompleteOnboardingPresenter();
presenter.present(result);
if (result.isErr()) {
const error = result.unwrapErr();
throw new Error(error.details?.message ?? 'Failed to complete onboarding');
}
return presenter.responseModel;
return this.completeOnboardingPresenter.getResponseModel();
}
async getDriverRegistrationStatus(
@@ -121,10 +124,12 @@ export class DriverService {
driverId: query.driverId,
});
const presenter = new DriverRegistrationStatusPresenter();
presenter.present(result);
if (result.isErr()) {
const error = result.unwrapErr();
throw new Error(error.details?.message ?? 'Failed to check registration status');
}
return presenter.responseModel;
return this.driverRegistrationStatusPresenter.getResponseModel();
}
async getCurrentDriver(userId: string): Promise<GetDriverOutputDTO | null> {
@@ -132,10 +137,9 @@ export class DriverService {
const driver = await this.driverRepository.findById(userId);
const presenter = new DriverPresenter();
presenter.present(driver ?? null);
this.driverPresenter.present(driver ?? null);
return presenter.responseModel;
return this.driverPresenter.getResponseModel();
}
async updateDriverProfile(
@@ -145,19 +149,21 @@ export class DriverService {
): Promise<GetDriverOutputDTO | null> {
this.logger.debug(`[DriverService] Updating driver profile for driverId: ${driverId}`);
const result = await this.updateDriverProfileUseCase.execute({ driverId, bio, country });
const input: UpdateDriverProfileInput = { driverId };
if (bio !== undefined) input.bio = bio;
if (country !== undefined) input.country = country;
const presenter = new DriverPresenter();
const result = await this.updateDriverProfileUseCase.execute(input);
if (result.isErr()) {
this.logger.error(`Failed to update driver profile: ${result.error.code}`);
presenter.present(null);
return presenter.responseModel;
this.logger.error(`Failed to update driver profile: ${result.unwrapErr().code}`);
this.driverPresenter.present(null);
return this.driverPresenter.getResponseModel();
}
const updatedDriver = await this.driverRepository.findById(driverId);
presenter.present(updatedDriver ?? null);
return presenter.responseModel;
this.driverPresenter.present(updatedDriver ?? null);
return this.driverPresenter.getResponseModel();
}
async getDriver(driverId: string): Promise<GetDriverOutputDTO | null> {
@@ -165,10 +171,9 @@ export class DriverService {
const driver = await this.driverRepository.findById(driverId);
const presenter = new DriverPresenter();
presenter.present(driver ?? null);
this.driverPresenter.present(driver ?? null);
return presenter.responseModel;
return this.driverPresenter.getResponseModel();
}
async getDriverProfile(driverId: string): Promise<GetDriverProfileOutputDTO> {
@@ -176,9 +181,11 @@ export class DriverService {
const result = await this.getProfileOverviewUseCase.execute({ driverId });
const presenter = new DriverProfilePresenter();
presenter.present(result);
if (result.isErr()) {
const error = result.unwrapErr();
throw new Error(error.details?.message ?? 'Failed to load driver profile');
}
return presenter.responseModel;
return this.driverProfilePresenter.getResponseModel();
}
}