Files
gridpilot.gg/apps/website/lib/services/media/AvatarService.ts
2025-12-18 13:48:35 +01:00

44 lines
1.6 KiB
TypeScript

import { RequestAvatarGenerationInputDTO } from '@/lib/types/generated/RequestAvatarGenerationInputDTO';
import { AvatarViewModel } from '@/lib/view-models/AvatarViewModel';
import { RequestAvatarGenerationViewModel } from '@/lib/view-models/RequestAvatarGenerationViewModel';
import { UpdateAvatarViewModel } from '@/lib/view-models/UpdateAvatarViewModel';
import type { MediaApiClient } from '../../api/media/MediaApiClient';
// TODO: Move these types to apps/website/lib/types/generated when available
type UpdateAvatarInputDto = { driverId: string; avatarUrl: string };
/**
* Avatar Service
*
* Orchestrates avatar operations by coordinating API calls and view model creation.
* All dependencies are injected via constructor.
*/
export class AvatarService {
constructor(
private readonly apiClient: MediaApiClient
) {}
/**
* Request avatar generation with view model transformation
*/
async requestAvatarGeneration(input: RequestAvatarGenerationInputDTO): Promise<RequestAvatarGenerationViewModel> {
const dto = await this.apiClient.requestAvatarGeneration(input);
return new RequestAvatarGenerationViewModel(dto);
}
/**
* Get avatar for driver with view model transformation
*/
async getAvatar(driverId: string): Promise<AvatarViewModel> {
const dto = await this.apiClient.getAvatar(driverId);
return new AvatarViewModel(dto);
}
/**
* Update avatar for driver with view model transformation
*/
async updateAvatar(input: UpdateAvatarInputDto): Promise<UpdateAvatarViewModel> {
const dto = await this.apiClient.updateAvatar(input);
return new UpdateAvatarViewModel(dto);
}
}