import type { MediaViewData } from '@/lib/view-data/MediaViewData'; import { ViewModel } from "../contracts/view-models/ViewModel"; type MediaAssetViewData = MediaViewData['assets'][number]; /** * Media View Model * * Client-only ViewModel created from ViewData (never DTO). * Represents a single media asset card in the UI. */ export class MediaViewModel extends ViewModel { id: string; src: string; title: string; category: string; date?: string; dimensions?: string; constructor(viewData: MediaAssetViewData) { super(); this.id = viewData.id; this.src = viewData.src; this.title = viewData.title; this.category = viewData.category; if (viewData.date !== undefined) this.date = viewData.date; if (viewData.dimensions !== undefined) this.dimensions = viewData.dimensions; } /** UI-specific: Combined subtitle used by MediaCard */ get subtitle(): string { return `${this.category}${this.dimensions ? ` • ${this.dimensions}` : ''}`; } /** UI-specific: Whether any metadata is present */ get hasMetadata(): boolean { return !!this.date || !!this.dimensions; } }