import type { NextApiRequest, NextApiResponse } from "next"; import { DocumentValidationError, documentHistoryPage, documentRevision, readDocument } from "@/lib/docs"; import { authorizeDocuments, documentApiError, pagination } from "@/lib/documents-api"; export default function handler(request: NextApiRequest, response: NextApiResponse) { try { if (!authorizeDocuments(request, response)) return; if (request.method !== "GET") { response.setHeader("Allow", "GET"); return response.status(405).end(); } const slug = request.query.slug; if (!Array.isArray(slug)) throw new DocumentValidationError("Invalid document slug"); const doc = readDocument(slug.join("/")); if (!doc) return response.status(404).json({ error: "文档不存在", code: "not_found" }); if (request.query.revision !== undefined) { if (request.query.history !== undefined || typeof request.query.revision !== "string" || !/^\d+$/.test(request.query.revision)) throw new DocumentValidationError("Invalid revision query"); const prior = documentRevision(doc.sourceSlug, Number(request.query.revision)); if (!prior) return response.status(404).json({ error: "修订不存在", code: "not_found" }); return response.status(200).json(prior); } if (request.query.history !== undefined) { if (request.query.history !== "1") throw new DocumentValidationError("Use history=1"); const { limit, offset } = pagination(request); return response.status(200).json(documentHistoryPage(doc.sourceSlug, limit, offset)); } return response.status(200).json(doc); } catch (error) { return documentApiError(response, error); } }