23 lines
1.2 KiB
TypeScript
23 lines
1.2 KiB
TypeScript
import type { NextApiRequest, NextApiResponse } from "next";
|
|
import { DocumentValidationError, saveDocumentBatch } from "@/lib/docs";
|
|
import { authorizeDocuments, documentApiError, idempotency, parseDocument } from "@/lib/documents-api";
|
|
|
|
export const config = { api: { bodyParser: { sizeLimit: "8mb" } } };
|
|
export default function handler(request: NextApiRequest, response: NextApiResponse) {
|
|
try {
|
|
const key = authorizeDocuments(request, response, true);
|
|
if (!key) return;
|
|
if (request.method !== "POST") {
|
|
response.setHeader("Allow", "POST");
|
|
return response.status(405).end();
|
|
}
|
|
const body = request.body;
|
|
if (!body || typeof body !== "object" || Array.isArray(body) ||
|
|
Object.keys(body).length !== 1 || !Array.isArray(body.documents) ||
|
|
!body.documents.length || body.documents.length > 100)
|
|
throw new DocumentValidationError("Expected { documents: [...] } with 1 to 100 documents");
|
|
const documents = body.documents.map((row: unknown) => parseDocument(row));
|
|
return response.status(200).json(saveDocumentBatch(documents, idempotency(request, key.id)));
|
|
} catch (error) { return documentApiError(response, error); }
|
|
}
|