| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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);
- }
- });
|