60 lines
1.8 KiB
TypeScript
60 lines
1.8 KiB
TypeScript
import type { IDriverRepository } from '../../domain/repositories/IDriverRepository';
|
|
import type { ICompleteDriverOnboardingPresenter, CompleteDriverOnboardingResultDTO } from '../presenters/ICompleteDriverOnboardingPresenter';
|
|
import type { UseCase } from '@core/shared/application/UseCase';
|
|
import { Driver } from '../../domain/entities/Driver';
|
|
|
|
export interface CompleteDriverOnboardingInput {
|
|
userId: string;
|
|
firstName: string;
|
|
lastName: string;
|
|
displayName: string;
|
|
country: string;
|
|
timezone?: string;
|
|
bio?: string;
|
|
}
|
|
|
|
/**
|
|
* Use Case for completing driver onboarding.
|
|
*/
|
|
export class CompleteDriverOnboardingUseCase
|
|
implements UseCase<CompleteDriverOnboardingInput, CompleteDriverOnboardingResultDTO, any, ICompleteDriverOnboardingPresenter>
|
|
{
|
|
constructor(private readonly driverRepository: IDriverRepository) {}
|
|
|
|
async execute(input: CompleteDriverOnboardingInput, presenter: ICompleteDriverOnboardingPresenter): Promise<void> {
|
|
presenter.reset();
|
|
|
|
try {
|
|
// Check if driver already exists
|
|
const existing = await this.driverRepository.findById(input.userId);
|
|
if (existing) {
|
|
presenter.present({
|
|
success: false,
|
|
errorMessage: 'Driver already exists',
|
|
});
|
|
return;
|
|
}
|
|
|
|
// Create new driver
|
|
const driver = Driver.create({
|
|
id: input.userId,
|
|
iracingId: input.userId, // Assuming userId is iracingId for now
|
|
name: input.displayName,
|
|
country: input.country,
|
|
bio: input.bio,
|
|
});
|
|
|
|
await this.driverRepository.save(driver);
|
|
|
|
presenter.present({
|
|
success: true,
|
|
driverId: driver.id,
|
|
});
|
|
} catch (error) {
|
|
presenter.present({
|
|
success: false,
|
|
errorMessage: error instanceof Error ? error.message : 'Unknown error',
|
|
});
|
|
}
|
|
}
|
|
} |