diff --git a/apps/server/src/contexts/invoices/domain/entities/invoice-items/invoice-item.ts b/apps/server/src/contexts/invoices/domain/entities/invoice-items/invoice-item.ts index 5a14a32a..bbb29d67 100644 --- a/apps/server/src/contexts/invoices/domain/entities/invoice-items/invoice-item.ts +++ b/apps/server/src/contexts/invoices/domain/entities/invoice-items/invoice-item.ts @@ -62,6 +62,17 @@ export class InvoiceItem extends ValueObject 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 } diff --git a/apps/server/src/contexts/invoices/presentation/dto/invoices.schemas.ts b/apps/server/src/contexts/invoices/presentation/dto/invoices.schemas.ts index ab5fa566..c93b6c25 100644 --- a/apps/server/src/contexts/invoices/presentation/dto/invoices.schemas.ts +++ b/apps/server/src/contexts/invoices/presentation/dto/invoices.schemas.ts @@ -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({}); diff --git a/apps/server/src/routes/invoices.routes.ts b/apps/server/src/routes/invoices.routes.ts index 7cfd4c4c..0b2840d7 100644 --- a/apps/server/src/routes/invoices.routes.ts +++ b/apps/server/src/routes/invoices.routes.ts @@ -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) => {