📄 Registrar Nueva Factura
Permite registrar una nueva factura en el sistema, vinculándola a un pedido (order) existente. Recibe el orderId y el archivo PDF como multipart/form-data.
/api/invoices/register
Sin Auth No requiere JWT
¿Cómo funciona?
Section titled “¿Cómo funciona?”-
Validación del archivo — Verifica que se haya enviado el campo
invoicePdf. Si falta, responde400. -
Validación del body — Comprueba que
orderIdesté presente en el body. -
Comprobación de duplicado — Verifica que no exista ya una factura para ese pedido. Si existe, lanza error
400. -
Búsqueda del pedido — Localiza el
Orderen Strapi pornumberOrder, incluyendo el usuario relacionado. -
Subida del PDF — Sube el archivo a la Media Library de Strapi mediante
uploadFile. -
Creación de la factura — Crea el registro
InvoiceconinvoiceId,order,user,fileydate. -
Respuesta — Retorna los datos de la factura recién creada.
Request
Section titled “Request”POST /api/invoices/registerContent-Type: multipart/form-data| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
orderId | string | ✅ | Identificador del pedido (numberOrder en la colección Order) |
invoicePdf | file | ✅ | Archivo PDF de la factura |
Respuestas
Section titled “Respuestas”{ "message": "Invoice registered successfully", "invoice": { "invoiceId": "ORD-2024-001", "date": "2024-03-15", "order": 42, "user": 7, "file": 15 }}{ "success": false, "message": "Invoice PDF is required"}{ "success": false, "message": "Invoice for order ID ORD-2024-001 already exists"}{ "success": false, "message": "Order not found: ORD-2024-001"}Ejemplo con fetch
Section titled “Ejemplo con fetch”const formData = new FormData();formData.append("orderId", "ORD-2024-001");formData.append("invoicePdf", pdfFile); // File object
const response = await fetch("/api/invoices/register", { method: "POST", body: formData,});
const data = await response.json();console.log("Factura registrada:", data.invoice.invoiceId);Archivos relacionados
Section titled “Archivos relacionados”| Archivo | Rol |
|---|---|
src/api/invoice/controllers/invoice.ts | Controlador — valida inputs y llama al servicio |
src/api/invoice/services/invoice.ts | Servicio — lógica de negocio y persistencia |
src/api/invoice/routes/custom-invoice.ts | Definición de la ruta |
src/utils/uploadFile.ts | Utilidad para subir archivos a la Media Library |
src/api/invoice/content-types/invoice/schema.json | Esquema del content type Invoice |