47 lines
1.3 KiB
TypeScript
47 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 body = await readBody(event)
|
|
const { taskId, canvasId, newState } = body
|
|
|
|
if (!taskId || !canvasId || !newState) {
|
|
throw createError({ statusCode: 400, message: 'taskId, canvasId and newState are required' })
|
|
}
|
|
|
|
// 1. Найти холст
|
|
const canvas = await prisma.canvas.findUnique({
|
|
where: { id: canvasId }
|
|
})
|
|
|
|
if (!canvas) {
|
|
throw createError({ statusCode: 404, message: 'Canvas not found' })
|
|
}
|
|
|
|
// 2. Найти и обновить узел в JSON
|
|
const nodes = (canvas.nodes as any[]) || []
|
|
const nodeIdx = nodes.findIndex(n => n.id === taskId)
|
|
|
|
if (nodeIdx === -1) {
|
|
throw createError({ statusCode: 404, message: 'Task node not found in canvas' })
|
|
}
|
|
|
|
// Обновляем состояние
|
|
nodes[nodeIdx].state = newState
|
|
|
|
// Также обновляем дату изменения, если нужно
|
|
nodes[nodeIdx].updatedAt = new Date().toISOString()
|
|
|
|
// 3. Сохранить изменения в БД
|
|
await prisma.canvas.update({
|
|
where: { id: canvasId },
|
|
data: { nodes }
|
|
})
|
|
|
|
return {
|
|
success: true,
|
|
message: `Task ${taskId} moved to ${newState}`
|
|
}
|
|
})
|