import { getTaskSetById, updateTaskSet, deleteTaskSet, addTaskTemplateToSet, removeTaskTemplateFromSet, } from "@/lib/queries/tasks"; import { NextResponse } from "next/server"; import { withReadAuth, withUserAuth } from "@/lib/middleware/auth"; import initializeDatabase from "@/lib/init-db"; // GET: Get a specific task set with its templates async function getTaskSetHandler(req, { params }) { initializeDatabase(); try { const { id } = await params; const taskSet = getTaskSetById(id); if (!taskSet) { return NextResponse.json( { error: "Task set not found" }, { status: 404 } ); } return NextResponse.json(taskSet); } catch (error) { console.error("Error fetching task set:", error); return NextResponse.json( { error: "Failed to fetch task set" }, { status: 500 } ); } } // PUT: Update a task set async function updateTaskSetHandler(req, { params }) { initializeDatabase(); try { const { id } = await params; const updates = await req.json(); // Validate required fields if (updates.name !== undefined && !updates.name.trim()) { return NextResponse.json( { error: "Name cannot be empty" }, { status: 400 } ); } if (updates.task_category !== undefined) { const validTypes = ["design", "construction"]; if (!validTypes.includes(updates.task_category)) { return NextResponse.json( { error: "Invalid task_category. Must be one of: design, construction" }, { status: 400 } ); } } // Handle template updates if (updates.templates !== undefined) { // Clear existing templates // Note: This is a simple implementation. In a real app, you might want to handle this more efficiently const currentSet = getTaskSetById(id); if (currentSet) { for (const template of currentSet.templates) { removeTaskTemplateFromSet(id, template.task_id); } } // Add new templates if (Array.isArray(updates.templates)) { for (let i = 0; i < updates.templates.length; i++) { const template = updates.templates[i]; addTaskTemplateToSet(id, template.task_id, i); } } // Remove templates from updates object so it doesn't interfere with task set update delete updates.templates; } const result = updateTaskSet(id, updates); if (result.changes === 0) { return NextResponse.json( { error: "Task set not found" }, { status: 404 } ); } return NextResponse.json({ success: true }); } catch (error) { console.error("Error updating task set:", error); return NextResponse.json( { error: "Failed to update task set", details: error.message }, { status: 500 } ); } } // DELETE: Delete a task set async function deleteTaskSetHandler(req, { params }) { initializeDatabase(); try { const { id } = await params; const result = deleteTaskSet(id); if (result.changes === 0) { return NextResponse.json( { error: "Task set not found" }, { status: 404 } ); } return NextResponse.json({ success: true }); } catch (error) { console.error("Error deleting task set:", error); return NextResponse.json( { error: "Failed to delete task set", details: error.message }, { status: 500 } ); } } // Protected routes - require authentication export const GET = withReadAuth(getTaskSetHandler); export const PUT = withUserAuth(updateTaskSetHandler); export const DELETE = withUserAuth(deleteTaskSetHandler);