Files
gridpilot.gg/apps/api/src/domain/media/presenters/GetMediaPresenter.ts
2025-12-21 22:35:38 +01:00

35 lines
997 B
TypeScript

import type { UseCaseOutputPort } from '@core/shared/application';
import type { GetMediaResult } from '@core/media/application/use-cases/GetMediaUseCase';
import type { GetMediaOutputDTO } from '../dtos/GetMediaOutputDTO';
export type GetMediaResponseModel = GetMediaOutputDTO | null;
export class GetMediaPresenter implements UseCaseOutputPort<GetMediaResult> {
private model: GetMediaResponseModel | null = null;
reset(): void {
this.model = null;
}
present(result: GetMediaResult): void {
const media = result.media;
this.model = {
id: media.id,
url: media.url,
type: media.type,
// Best-effort mapping from arbitrary metadata
category: (media.metadata as { category?: string } | undefined)?.category,
uploadedAt: media.uploadedAt,
size: media.size,
};
}
getResponseModel(): GetMediaResponseModel | null {
return this.model;
}
get responseModel(): GetMediaResponseModel {
return this.model ?? null;
}
}