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 { constructor(private readonly driverRepository: IDriverRepository) {} async execute(input: CompleteDriverOnboardingInput, presenter: ICompleteDriverOnboardingPresenter): Promise { 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', }); } } }