Files
Avtex/app/server/api/canvas/[id].put.ts
T

34 lines
1.3 KiB
TypeScript

import { requireAuth } from '~/server/utils/auth'
import { prisma } from '~/server/utils/prisma'
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 body = await readBody(event)
const existing = await prisma.canvas.findUnique({ where: { id } })
if (!existing) throw createError({ statusCode: 404, message: 'Canvas not found' })
// Allow if owner, or if admin, or if canvas is public (for collaborative editing)
if (existing.ownerId !== user.id && user.role !== 'admin' && !existing.isPublic) {
console.log('[DEBUG 403]', { ownerId: existing.ownerId, userId: user.id, userRole: user.role, isPublic: existing.isPublic })
throw createError({ statusCode: 403, message: 'Access denied' })
}
const { name, nodes, edges, isPublic, groupId } = body
const canvas = await prisma.canvas.update({
where: { id },
data: {
...(name !== undefined && { name }),
...(nodes !== undefined && { nodes }),
...(edges !== undefined && { edges }),
...(isPublic !== undefined && { isPublic }),
...(groupId !== undefined && { groupId: groupId || null })
}
})
return { canvas }
})