import { v4 as uuidv4 } from 'uuid'; import { type ChartInstance, type LayoutItem, type Template } from '@/domain'; import { type ITemplateUseCase } from '../ports/input/ITemplateUseCase'; import { type IStorageGateway } from '../ports/output/IStorageGateway'; const TEMPLATE_KEY_PREFIX = 'template:'; export class TemplateUseCase implements ITemplateUseCase { constructor(private readonly storage: IStorageGateway) {} save( name: string, description: string, charts: ChartInstance[], layout: LayoutItem[], theme: string, ): Template { const template: Template = { id: uuidv4(), name, description, charts: charts.map(({ dataSetId: _, ...rest }) => rest), layout, theme, createdAt: new Date().toISOString(), }; this.storage.save(`${TEMPLATE_KEY_PREFIX}${template.id}`, template); return template; } load(templateId: string): Template | null { return this.storage.load