import type Database from "bun:sqlite"; import type { RuntimeMode } from "../../../shared/api"; import type { Logger } from "../../logger"; import { getConversation, listMessages } from "../../db/conversations"; import { createApiError, jsonResponse } from "../../helpers"; import { validateIdParam, validatePagination } from "../../middleware"; export function handleListMessages(req: Request, db: Database, mode: RuntimeMode, _logger: Logger): Response { const parts = new URL(req.url).pathname.split("/"); const projectId = parts[3]; const conversationId = parts[5]; const validatedProject = validateIdParam(projectId ?? "", mode); if (validatedProject instanceof Response) return validatedProject; const validatedConv = validateIdParam(conversationId ?? "", mode); if (validatedConv instanceof Response) return validatedConv; const convResult = getConversation(db, validatedConv.id); if ("error" in convResult) { return jsonResponse(createApiError(convResult.error, convResult.status), { mode, status: convResult.status }); } if (convResult.conversation.projectId !== validatedProject.id) { return jsonResponse(createApiError("会话不属于该项目", 403), { mode, status: 403 }); } const url = new URL(req.url); const pageParam = url.searchParams.get("page"); const pageSizeParam = url.searchParams.get("pageSize"); const pagination = validatePagination(pageParam, pageSizeParam, mode); if (pagination instanceof Response) return pagination; const result = listMessages(db, validatedConv.id, { page: pagination.page, pageSize: pagination.pageSize, }); return jsonResponse(result, { mode }); }