import type { MediaApiClient } from '../../api/media/MediaApiClient'; import { MediaViewModel, UploadMediaViewModel, DeleteMediaViewModel } from '../../view-models'; // TODO: Move these types to apps/website/lib/types/generated when available type UploadMediaInputDto = { url: string; mediaType: string; entityType: string; entityId: string }; /** * Media Service * * Orchestrates media operations by coordinating API calls and view model creation. * All dependencies are injected via constructor. */ export class MediaService { constructor( private readonly apiClient: MediaApiClient ) {} /** * Upload media file with view model transformation */ async uploadMedia(input: UploadMediaInputDto): Promise { const dto = await this.apiClient.uploadMedia(input); return new UploadMediaViewModel(dto); } /** * Get media by ID with view model transformation */ async getMedia(mediaId: string): Promise { const dto = await this.apiClient.getMedia(mediaId); return new MediaViewModel(dto); } /** * Delete media by ID with view model transformation */ async deleteMedia(mediaId: string): Promise { const dto = await this.apiClient.deleteMedia(mediaId); return new DeleteMediaViewModel(dto); } }