import { desc } from "drizzle-orm"; import { getDb } from "../../../../../db"; import { notes } from "../../../db/schema"; function toRouteErrorMessage(error: unknown) { const message = error instanceof Error ? error.message : "Unexpected error"; const detail = error instanceof Error && error.cause instanceof Error ? error.cause.message : ""; const combined = `${message}\n${detail}`; if (combined.includes("no such table") || combined.includes('from "notes"')) { return "The notes table is unavailable. Generate the migration locally with `npm run db:generate`, then deploy so the platform can apply the generated SQL to the real D1 database."; } return message; } export async function GET() { try { const db = getDb(); const rows = await db .select() .from(notes) .orderBy(desc(notes.createdAt), desc(notes.id)) .limit(20); return Response.json({ notes: rows }); } catch (error) { return Response.json( { error: toRouteErrorMessage(error) }, { status: 500 } ); } } export async function POST(request: Request) { try { const payload = (await request.json()) as { title?: string; content?: string; }; const title = payload.title?.trim() ?? ""; const content = payload.content?.trim() ?? ""; if (!title) { return Response.json({ error: "title is required" }, { status: 400 }); } const db = getDb(); const [note] = await db.insert(notes).values({ title, content }).returning(); return Response.json({ note }, { status: 201 }); } catch (error) { return Response.json( { error: toRouteErrorMessage(error) }, { status: 500 } ); } }