Files
gridpilot.gg/apps/website/lib/services/onboarding/OnboardingService.ts
2025-12-25 00:19:36 +01:00

60 lines
2.3 KiB
TypeScript

import { MediaApiClient } from '@/lib/api/media/MediaApiClient';
import { DriversApiClient } from '@/lib/api/drivers/DriversApiClient';
import { RequestAvatarGenerationInputDTO } from '@/lib/types/generated/RequestAvatarGenerationInputDTO';
import { CompleteOnboardingInputDTO } from '@/lib/types/generated/CompleteOnboardingInputDTO';
import { RequestAvatarGenerationOutputDTO } from '@/lib/types/generated/RequestAvatarGenerationOutputDTO';
import { ValidateFaceInputDTO } from '@/lib/types/generated/ValidateFaceInputDTO';
import { ValidateFaceOutputDTO } from '@/lib/types/generated/ValidateFaceOutputDTO';
import { RequestAvatarGenerationViewModel } from '@/lib/view-models/RequestAvatarGenerationViewModel';
import { CompleteOnboardingViewModel } from '@/lib/view-models/CompleteOnboardingViewModel';
import { AvatarGenerationViewModel } from '@/lib/view-models/AvatarGenerationViewModel';
/**
* Onboarding Service
*
* Handles the complete onboarding flow including avatar generation and profile creation.
*/
export class OnboardingService {
constructor(
private readonly mediaApiClient: MediaApiClient,
private readonly driversApiClient: DriversApiClient
) {}
/**
* Validate face photo using the API
*/
async validateFacePhoto(photoData: string): Promise<{ isValid: boolean; errorMessage?: string }> {
const input: ValidateFaceInputDTO = { imageData: photoData };
const dto: ValidateFaceOutputDTO = await this.mediaApiClient.validateFacePhoto(input);
return { isValid: dto.isValid, errorMessage: dto.errorMessage };
}
/**
* Generate avatars based on face photo and suit color
* This method wraps the API call and returns a ViewModel
*/
async generateAvatars(
userId: string,
facePhotoData: string,
suitColor: string
): Promise<AvatarGenerationViewModel> {
const input: RequestAvatarGenerationInputDTO = {
userId,
facePhotoData,
suitColor,
};
const dto: RequestAvatarGenerationOutputDTO = await this.mediaApiClient.requestAvatarGeneration(input);
return new AvatarGenerationViewModel(dto);
}
/**
* Complete onboarding process
*/
async completeOnboarding(
input: CompleteOnboardingInputDTO
): Promise<CompleteOnboardingViewModel> {
const dto = await this.driversApiClient.completeOnboarding(input);
return new CompleteOnboardingViewModel(dto);
}
}