import { NextRequest, NextResponse } from "next/server"; import { db, schema } from "@/lib/db"; import { eq, asc } from "drizzle-orm"; import { v4 as uuidv4 } from "uuid"; // GET /api/folders - List all folders export async function GET() { try { const folders = await db .select() .from(schema.folders) .orderBy(asc(schema.folders.sortOrder)); return NextResponse.json(folders); } catch (error) { console.error("Error listing folders:", error); return NextResponse.json({ error: "Failed to list folders" }, { status: 500 }); } } // POST /api/folders - Create folder export async function POST(request: NextRequest) { try { const body = await request.json(); const { name, color, icon, parentId } = body; if (!name) { return NextResponse.json({ error: "Name is required" }, { status: 400 }); } const id = uuidv4(); await db.insert(schema.folders).values({ id, name, color: color || "#3b82f6", icon: icon || "folder", parentId: parentId || null, }); const folder = await db.select().from(schema.folders).where(eq(schema.folders.id, id)).limit(1); return NextResponse.json(folder[0], { status: 201 }); } catch (error) { console.error("Error creating folder:", error); return NextResponse.json({ error: "Failed to create folder" }, { status: 500 }); } } // PATCH /api/folders - Update folder export async function PATCH(request: NextRequest) { try { const body = await request.json(); const { id, name, color, icon, sortOrder } = body; if (!id) { return NextResponse.json({ error: "ID is required" }, { status: 400 }); } const updates: Partial = {}; if (name) updates.name = name; if (color) updates.color = color; if (icon) updates.icon = icon; if (sortOrder !== undefined) updates.sortOrder = sortOrder; await db.update(schema.folders).set(updates).where(eq(schema.folders.id, id)); const folder = await db.select().from(schema.folders).where(eq(schema.folders.id, id)).limit(1); return NextResponse.json(folder[0]); } catch (error) { console.error("Error updating folder:", error); return NextResponse.json({ error: "Failed to update folder" }, { status: 500 }); } } // DELETE /api/folders?id=... export async function DELETE(request: NextRequest) { try { const { searchParams } = new URL(request.url); const id = searchParams.get("id"); if (!id) { return NextResponse.json({ error: "ID is required" }, { status: 400 }); } // Remove folder reference from articles await db.update(schema.articles).set({ folderId: null }).where(eq(schema.articles.folderId, id)); // Delete folder await db.delete(schema.folders).where(eq(schema.folders.id, id)); return NextResponse.json({ success: true }); } catch (error) { console.error("Error deleting folder:", error); return NextResponse.json({ error: "Failed to delete folder" }, { status: 500 }); } }