import { Router } from "express"; import { db, briefsTable } from "@workspace/db"; import { eq, and } from "drizzle-orm"; import { CreateBriefBody, UpdateBriefBody, UpdateBriefParams, DeleteBriefParams, } from "@workspace/api-zod"; const router = Router(); router.get("/briefs", async (req, res) => { const briefs = await db.select().from(briefsTable).where(eq(briefsTable.userId, req.user!.id)).orderBy(briefsTable.createdAt); res.json(briefs); }); router.post("/briefs", async (req, res) => { const body = CreateBriefBody.safeParse(req.body); if (!body.success) { res.status(400).json({ error: body.error.message }); return; } const [brief] = await db.insert(briefsTable).values({ ...body.data, userId: req.user!.id }).returning(); res.status(201).json(brief); }); router.patch("/briefs/:id", async (req, res) => { const params = UpdateBriefParams.safeParse({ id: Number(req.params.id) }); if (!params.success) { res.status(400).json({ error: params.error.message }); return; } const body = UpdateBriefBody.safeParse(req.body); if (!body.success) { res.status(400).json({ error: body.error.message }); return; } const [brief] = await db .update(briefsTable) .set(body.data) .where(and(eq(briefsTable.id, params.data.id), eq(briefsTable.userId, req.user!.id))) .returning(); if (!brief) { res.status(404).json({ error: "Brief not found" }); return; } res.json(brief); }); router.delete("/briefs/:id", async (req, res) => { const params = DeleteBriefParams.safeParse({ id: Number(req.params.id) }); if (!params.success) { res.status(400).json({ error: params.error.message }); return; } await db.delete(briefsTable).where(and(eq(briefsTable.id, params.data.id), eq(briefsTable.userId, req.user!.id))); res.status(204).send(); }); export default router;