import { requireAuth } from '~/server/utils/auth' import { canvases } from '~/server/utils/db' import type { CanvasData } from '~/server/utils/db' export default defineEventHandler(async (event) => { const user = requireAuth(event) const id = getRouterParam(event, 'id') if (!id) { throw createError({ statusCode: 400, message: 'Canvas ID is required' }) } const original = canvases.get(id) if (!original) { throw createError({ statusCode: 404, message: 'Canvas not found' }) } // Check permissions if (original.ownerId !== user.id && !original.isPublic) { throw createError({ statusCode: 403, message: 'Access denied' }) } const newId = `canvas-${Date.now()}-${Math.random().toString(36).slice(2, 8)}` const duplicate: CanvasData = { ...original, id: newId, name: `${original.name} (Copy)`, ownerId: user.id, groupId: undefined, // Duplicates are personal isPublic: false, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), nodes: original.nodes.map(node => ({ ...node, id: `${node.id}-copy-${Date.now()}` })), edges: original.edges.map(edge => ({ ...edge, id: `${edge.id}-copy-${Date.now()}` })) } canvases.set(newId, duplicate) return { canvas: duplicate } })