import { Router } from "express"; import { z } from "zod"; import { listConversations, createConversation, getConversationMessages, updateConversationTitle, deleteConversation, exportConversationAsMarkdown } from "../services/conversationsService.js"; import { requireUser } from "../middleware/requireUser.js"; import { parseId } from "../middleware/parseId.js"; export const conversationsRouter = Router(); conversationsRouter.get("/", requireUser, async (req, res, next) => { try { const limit = z.coerce.number().int().positive().max(100).catch(50).parse(req.query.limit); const offset = z.coerce.number().int().nonnegative().catch(0).parse(req.query.offset); const items = await listConversations(req.userId, { limit, offset }); res.json({ items }); } catch (err) { next(err); } }); conversationsRouter.post("/", requireUser, async (req, res, next) => { try { const title = z.string().max(200).catch("Nova conversa").parse(req.body?.title); const conv = await createConversation(req.userId, title); res.json(conv); } catch (err) { next(err); } }); conversationsRouter.get("/:id/messages", requireUser, parseId, async (req, res, next) => { try { const msgs = await getConversationMessages(req.params.id, req.userId); if (!msgs) return res.status(404).json({ error: "not_found" }); res.json({ items: msgs }); } catch (err) { next(err); } }); conversationsRouter.patch("/:id", requireUser, parseId, async (req, res, next) => { try { const title = z.string().min(1).max(200).parse(req.body?.title); await updateConversationTitle(req.params.id, req.userId, title); res.json({ ok: true }); } catch (err) { next(err); } }); conversationsRouter.delete("/:id", requireUser, parseId, async (req, res, next) => { try { await deleteConversation(req.params.id, req.userId); res.json({ ok: true }); } catch (err) { next(err); } }); conversationsRouter.get("/:id/export", requireUser, parseId, async (req, res, next) => { try { const markdown = await exportConversationAsMarkdown(req.params.id, req.userId); if (markdown == null) return res.status(404).json({ error: "not_found" }); res.json({ markdown }); } catch (err) { next(err); } });