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

@@ -59,6 +59,12 @@ export class MediaService {
private readonly updateAvatarUseCase: UpdateAvatarUseCase,
@Inject(LOGGER_TOKEN)
private readonly logger: Logger,
private readonly requestAvatarGenerationPresenter: RequestAvatarGenerationPresenter,
private readonly uploadMediaPresenter: UploadMediaPresenter,
private readonly getMediaPresenter: GetMediaPresenter,
private readonly deleteMediaPresenter: DeleteMediaPresenter,
private readonly getAvatarPresenter: GetAvatarPresenter,
private readonly updateAvatarPresenter: UpdateAvatarPresenter,
) {}
async requestAvatarGeneration(
@@ -66,18 +72,23 @@ export class MediaService {
): Promise<RequestAvatarGenerationOutputDTO> {
this.logger.debug('[MediaService] Requesting avatar generation.');
const presenter = new RequestAvatarGenerationPresenter();
presenter.reset();
const result = await this.requestAvatarGenerationUseCase.execute({
userId: input.userId,
facePhotoData: input.facePhotoData,
suitColor: input.suitColor as RacingSuitColor,
});
presenter.present(result);
if (result.isErr()) {
const error = result.unwrapErr();
return {
success: false,
requestId: '',
avatarUrls: [],
errorMessage: error.details?.message ?? 'Failed to request avatar generation',
};
}
return presenter.responseModel;
return this.requestAvatarGenerationPresenter.responseModel;
}
async uploadMedia(
@@ -85,69 +96,87 @@ export class MediaService {
): Promise<UploadMediaOutputDTO> {
this.logger.debug('[MediaService] Uploading media.');
const presenter = new UploadMediaPresenter();
presenter.reset();
const result = await this.uploadMediaUseCase.execute({
file: input.file,
uploadedBy: input.userId ?? '',
metadata: input.metadata,
metadata: input.metadata || {},
});
presenter.present(result);
if (result.isErr()) {
const error = result.unwrapErr();
return {
success: false,
error: error.details?.message ?? 'Upload failed',
};
}
return presenter.responseModel;
return this.uploadMediaPresenter.responseModel;
}
async getMedia(mediaId: string): Promise<GetMediaOutputDTO | null> {
this.logger.debug(`[MediaService] Getting media: ${mediaId}`);
const presenter = new GetMediaPresenter();
presenter.reset();
const result = await this.getMediaUseCase.execute({ mediaId });
presenter.present(result);
return presenter.responseModel;
if (result.isErr()) {
const error = result.unwrapErr();
if (error.code === 'MEDIA_NOT_FOUND') {
return null;
}
throw new Error(error.details?.message ?? 'Failed to get media');
}
return this.getMediaPresenter.responseModel;
}
async deleteMedia(mediaId: string): Promise<DeleteMediaOutputDTO> {
this.logger.debug(`[MediaService] Deleting media: ${mediaId}`);
const presenter = new DeleteMediaPresenter();
presenter.reset();
const result = await this.deleteMediaUseCase.execute({ mediaId });
presenter.present(result);
return presenter.responseModel;
if (result.isErr()) {
const error = result.unwrapErr();
return {
success: false,
error: error.details?.message ?? 'Failed to delete media',
};
}
return this.deleteMediaPresenter.responseModel;
}
async getAvatar(driverId: string): Promise<GetAvatarOutputDTO | null> {
this.logger.debug(`[MediaService] Getting avatar for driver: ${driverId}`);
const presenter = new GetAvatarPresenter();
presenter.reset();
const result = await this.getAvatarUseCase.execute({ driverId });
presenter.present(result);
return presenter.responseModel;
if (result.isErr()) {
const error = result.unwrapErr();
if (error.code === 'AVATAR_NOT_FOUND') {
return null;
}
throw new Error(error.details?.message ?? 'Failed to get avatar');
}
return this.getAvatarPresenter.responseModel;
}
async updateAvatar(driverId: string, input: UpdateAvatarInput): Promise<UpdateAvatarOutputDTO> {
this.logger.debug(`[MediaService] Updating avatar for driver: ${driverId}`);
const presenter = new UpdateAvatarPresenter();
presenter.reset();
const result = await this.updateAvatarUseCase.execute({
driverId,
mediaUrl: input.mediaUrl,
mediaUrl: input.avatarUrl,
});
presenter.present(result);
if (result.isErr()) {
const error = result.unwrapErr();
return {
success: false,
error: error.details?.message ?? 'Failed to update avatar',
};
}
return presenter.responseModel;
return this.updateAvatarPresenter.responseModel;
}
}