This commit is contained in:
David Arranz 2025-04-01 19:13:04 +02:00
parent 417d753f1e
commit b22845f8da
3 changed files with 43 additions and 9 deletions

View File

@ -62,6 +62,17 @@ export class InvoiceItem extends ValueObject<IInvoiceItemProps> implements IInvo
return this.props;
}
toPrimitive() {
return {
description: this.description.toPrimitive(),
quantity: this.quantity.toPrimitive(),
unit_price: this.unitPrice.toPrimitive(),
subtotal_price: this.subtotalPrice.toPrimitive(),
discount: this.discount.toPrimitive(),
total_price: this.totalPrice.toPrimitive(),
};
}
calculateSubtotal(): MoneyValue {
return this.unitPrice.multiply(this.quantity.toNumber()); // Precio unitario * Cantidad
}

View File

@ -1,10 +1,36 @@
import { z } from "zod";
export const IListInvoicesRequestSchema = z.object({});
export const ICreateInvoiceRequestSchema = z.object({
id: z.string().uuid(),
invoice_number: z.string().min(1),
invoice_series: z.string().min(1),
issue_date: z.string().refine((date) => {
const dateStr = z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Invalid YYYY-MM-DD format");
return dateStr.safeParse(date).success;
}),
operation_date: z.string().refine((date) => {
const dateStr = z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Invalid YYYY-MM-DD format");
return dateStr.safeParse(date).success;
}),
customerId: z.string().uuid(),
lang_code: z.string().min(1),
currency_code: z.string().min(1),
export const IGetInvoiceRequestSchema = z.object({});
export const ICreateInvoiceRequestSchema = z.object({});
items: z.array(
z.object({
//id: z.string().uuid(),
description: z.string().min(1),
unit_price: z.object({
amount: z.number().positive(),
scale: z.number().positive(),
}),
quantity: z.object({
amount: z.number().positive(),
scale: z.number().positive(),
}),
})
),
});
export const IUpdateInvoiceRequestSchema = z.object({});

View File

@ -3,8 +3,7 @@ import {
buildCreateInvoiceController,
buildGetInvoiceController,
buildListInvoicesController,
IGetInvoiceRequestSchema,
IListInvoicesRequestSchema,
ICreateInvoiceRequestSchema,
} from "@contexts/invoices/presentation";
import { NextFunction, Request, Response, Router } from "express";
@ -14,7 +13,6 @@ export const invoicesRouter = (appRouter: Router) => {
routes.get(
"/",
validateAndParseBody(IListInvoicesRequestSchema),
//checkTabContext,
//checkUser,
(req: Request, res: Response, next: NextFunction) => {
@ -24,7 +22,6 @@ export const invoicesRouter = (appRouter: Router) => {
routes.get(
"/:invoiceId",
validateAndParseBody(IGetInvoiceRequestSchema),
//checkTabContext,
//checkUser,
(req: Request, res: Response, next: NextFunction) => {
@ -34,7 +31,7 @@ export const invoicesRouter = (appRouter: Router) => {
routes.post(
"/",
//validateAndParseBody(ICreateInvoiceRequestSchema),
validateAndParseBody(ICreateInvoiceRequestSchema, { sanitize: false }),
//checkTabContext,
//checkUser,
(req: Request, res: Response, next: NextFunction) => {