TypeScript 97.4%
SQL 1%
JavaScript 0.9%
CSS 0.6%
1import { z } from "zod";2import { withUser, parseBody, json } from "@/lib/api";3import { listFolders, createFolder, updateFolder, deleteFolder } from "@/lib/conversations/service";45export const dynamic = "force-dynamic";67export const GET = withUser(async ({ user }) => json({ folders: await listFolders(user.id) }));89export const POST = withUser(async ({ req, user }) => {10 const body = await parseBody(req, z.object({ name: z.string().min(1).max(80), color: z.string().max(20).nullable().optional() }));11 return json({ folder: await createFolder(user.id, body.name, body.color) }, { status: 201 });12});1314export const PATCH = withUser(async ({ req, user }) => {15 const body = await parseBody(req, z.object({ id: z.string().max(64), name: z.string().min(1).max(80).optional(), color: z.string().max(20).nullable().optional(), sortOrder: z.number().int().optional() }));16 const { id, ...patch } = body;17 return json({ folder: await updateFolder(user.id, id, patch) });18});1920export const DELETE = withUser(async ({ req, user }) => {21 const id = new URL(req.url).searchParams.get("id");22 if (id) await deleteFolder(user.id, id);23 return json({ ok: true });24});25