From 3965c807e1525c85dec4973c27b019a0d6b4bf58 Mon Sep 17 00:00:00 2001 From: david Date: Tue, 1 Apr 2025 17:32:53 +0200 Subject: [PATCH] . --- apps/server/src/app.ts | 19 +++++++++++++++---- .../common/domain/value-objects/unique-id.ts | 8 ++++++-- .../common/domain/value-objects/utc-date.ts | 10 +++++----- .../src/common/infrastructure/logger/index.ts | 16 ++++++++-------- .../application/create-invoice.use-case.ts | 2 +- .../domain/value-objects/invoice-number.ts | 4 ++++ .../domain/value-objects/invoice-serie.ts | 4 ++++ .../intrastructure/sequelize/invoice.model.ts | 4 ++-- .../presenter/create-invoice.presenter.ts | 2 +- .../presenter/get-invoice.presenter.ts | 6 +++--- .../presentation/controllers/index.ts | 2 +- apps/server/src/routes/invoices.routes.ts | 9 ++++++--- 12 files changed, 56 insertions(+), 30 deletions(-) diff --git a/apps/server/src/app.ts b/apps/server/src/app.ts index a8608ac6..7766c2f6 100644 --- a/apps/server/src/app.ts +++ b/apps/server/src/app.ts @@ -14,7 +14,6 @@ export function createApp(): Application { app.set("port", process.env.PORT ?? 3002); // secure apps by setting various HTTP headers - app.use(helmet()); app.disable("x-powered-by"); // Middlewares @@ -24,6 +23,18 @@ export function createApp(): Application { app.use(responseTime()); // set up the response-time middleware + // secure apps by setting various HTTP headers + app.use(helmet()); + + // Middleware global para desactivar la caché en todas las rutas + app.use((req, res, next) => { + res.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"); + res.setHeader("Pragma", "no-cache"); + res.setHeader("Expires", "0"); + res.setHeader("etag", "false"); + next(); // Continúa con la siguiente función middleware o la ruta + }); + // Inicializar Auth Provider app.use((req, res, next) => { authProvider.initialize(); @@ -35,11 +46,11 @@ export function createApp(): Application { next(); }); - // Registrar rutas de la API - app.use("/api/v1", v1Routes()); - // Gestión global de errores app.use(globalErrorHandler); + // Registrar rutas de la API + app.use("/api/v1", v1Routes()); + return app; } diff --git a/apps/server/src/common/domain/value-objects/unique-id.ts b/apps/server/src/common/domain/value-objects/unique-id.ts index eab93bee..1343fc2f 100644 --- a/apps/server/src/common/domain/value-objects/unique-id.ts +++ b/apps/server/src/common/domain/value-objects/unique-id.ts @@ -36,7 +36,11 @@ export class UniqueID extends ValueObject { return this.props; } - toPrimitive(): string { - return this.props; + toString(): string { + return this.getValue(); + } + + toPrimitive() { + return this.getValue(); } } diff --git a/apps/server/src/common/domain/value-objects/utc-date.ts b/apps/server/src/common/domain/value-objects/utc-date.ts index 72d2db9a..0453851e 100644 --- a/apps/server/src/common/domain/value-objects/utc-date.ts +++ b/apps/server/src/common/domain/value-objects/utc-date.ts @@ -27,8 +27,8 @@ export class UtcDate extends ValueObject { } /** - * Crea una instancia de UtcDate a partir de un string en formato UTC. - * @param dateString Fecha en formato UTC (con o sin hora) + * Crea una instancia de UtcDate a partir de un string en formato UTC ISO 8601. + * @param dateString Fecha en formato UTC (con o sin hora YYYY-MM-DD) * @returns UtcDate si es válida, Error en caso contrario. */ static create(dateString: string): Result { @@ -45,10 +45,10 @@ export class UtcDate extends ValueObject { } /** - * Devuelve la fecha completa en formato UTC con hora. Ejemplo: 2025-12-31T23:59:59Z. + * Devuelve la fecha completa en formato UTC con hora (ISO 8601). Ejemplo: 2025-12-31T23:59:59Z. */ toPrimitive() { - return this.getValue(); + return this.toISOString(); } /** @@ -59,7 +59,7 @@ export class UtcDate extends ValueObject { } /** - * Devuelve la fecha en formato UTC con hora (ISO 8601). + * Devuelve la fecha en formato UTC con hora (ISO 8601). Ejemplo: 2025-12-31T23:59:59Z. */ toISOString(): string { return this.date.toISOString(); diff --git a/apps/server/src/common/infrastructure/logger/index.ts b/apps/server/src/common/infrastructure/logger/index.ts index 5a82e41f..d20b8244 100644 --- a/apps/server/src/common/infrastructure/logger/index.ts +++ b/apps/server/src/common/infrastructure/logger/index.ts @@ -82,14 +82,14 @@ const initLogger = () => { // If we're not in production then log to the `console` with the format: // `${info.level}: ${info.message} JSON.stringify({ ...rest }) ` // - //if (!config.isProduction) { - logger.add( - new transports.Console({ - format: consoleFormat, - level: "debug", - }) - ); - //} + if (!isProduction) { + logger.add( + new transports.Console({ + format: consoleFormat, + level: "debug", + }) + ); + } return logger; }; diff --git a/apps/server/src/contexts/invoices/application/create-invoice.use-case.ts b/apps/server/src/contexts/invoices/application/create-invoice.use-case.ts index 89605d40..b9720b5a 100644 --- a/apps/server/src/contexts/invoices/application/create-invoice.use-case.ts +++ b/apps/server/src/contexts/invoices/application/create-invoice.use-case.ts @@ -66,7 +66,7 @@ export class CreateInvoiceUseCase { invoiceSeries: invoiceSeriesOrError.data, issueDate: issueDateOrError.data, operationDate: operationDateOrError.data, - //invoiceCurrency: defaultCurrency. + invoiceCurrency: dto.currency_code, }; /*if (errors.length > 0) { diff --git a/apps/server/src/contexts/invoices/domain/value-objects/invoice-number.ts b/apps/server/src/contexts/invoices/domain/value-objects/invoice-number.ts index eb436fa0..b6f3f953 100644 --- a/apps/server/src/contexts/invoices/domain/value-objects/invoice-number.ts +++ b/apps/server/src/contexts/invoices/domain/value-objects/invoice-number.ts @@ -35,4 +35,8 @@ export class InvoiceNumber extends ValueObject { toString(): string { return this.getValue(); } + + toPrimitive() { + return this.getValue(); + } } diff --git a/apps/server/src/contexts/invoices/domain/value-objects/invoice-serie.ts b/apps/server/src/contexts/invoices/domain/value-objects/invoice-serie.ts index 971e5f00..37616c85 100644 --- a/apps/server/src/contexts/invoices/domain/value-objects/invoice-serie.ts +++ b/apps/server/src/contexts/invoices/domain/value-objects/invoice-serie.ts @@ -43,4 +43,8 @@ export class InvoiceSerie extends ValueObject { toString(): string { return this.getValue(); } + + toPrimitive() { + return this.getValue(); + } } diff --git a/apps/server/src/contexts/invoices/intrastructure/sequelize/invoice.model.ts b/apps/server/src/contexts/invoices/intrastructure/sequelize/invoice.model.ts index 9ed80e9c..0b1e13a8 100644 --- a/apps/server/src/contexts/invoices/intrastructure/sequelize/invoice.model.ts +++ b/apps/server/src/contexts/invoices/intrastructure/sequelize/invoice.model.ts @@ -73,13 +73,13 @@ export default (sequelize: Sequelize) => { }, issue_date: { - type: new DataTypes.DATE(), + type: new DataTypes.DATEONLY(), allowNull: true, defaultValue: null, }, operation_date: { - type: new DataTypes.DATE(), + type: new DataTypes.DATEONLY(), allowNull: true, defaultValue: null, }, diff --git a/apps/server/src/contexts/invoices/presentation/controllers/create-invoice/presenter/create-invoice.presenter.ts b/apps/server/src/contexts/invoices/presentation/controllers/create-invoice/presenter/create-invoice.presenter.ts index 69fb0e2a..811e676a 100644 --- a/apps/server/src/contexts/invoices/presentation/controllers/create-invoice/presenter/create-invoice.presenter.ts +++ b/apps/server/src/contexts/invoices/presentation/controllers/create-invoice/presenter/create-invoice.presenter.ts @@ -15,7 +15,7 @@ export const createInvoicePresenter: ICreateInvoicePresenter = { issue_date: invoice.issueDate.toDateString(), operation_date: invoice.operationDate.toDateString(), language_code: "es", - currency: invoice.currency, + currency: invoice.invoiceCurrency || "EUR", subtotal: invoice.calculateSubtotal().toPrimitive(), total: invoice.calculateTotal().toPrimitive(), diff --git a/apps/server/src/contexts/invoices/presentation/controllers/get-invoice/presenter/get-invoice.presenter.ts b/apps/server/src/contexts/invoices/presentation/controllers/get-invoice/presenter/get-invoice.presenter.ts index d7f1f30c..5af58bfa 100644 --- a/apps/server/src/contexts/invoices/presentation/controllers/get-invoice/presenter/get-invoice.presenter.ts +++ b/apps/server/src/contexts/invoices/presentation/controllers/get-invoice/presenter/get-invoice.presenter.ts @@ -12,10 +12,10 @@ export const getInvoicePresenter: IGetInvoicePresenter = { invoice_status: invoice.status.toString(), invoice_number: invoice.invoiceNumber.toString(), invoice_series: invoice.invoiceSeries.toString(), - issue_date: invoice.issueDate.toISOString(), - operation_date: invoice.operationDate.toISOString(), + issue_date: invoice.issueDate.toDateString(), + operation_date: invoice.operationDate.toDateString(), language_code: "ES", - currency: invoice.currency, + currency: invoice.invoiceCurrency.toString(), subtotal: invoice.calculateSubtotal().toPrimitive(), total: invoice.calculateTotal().toPrimitive(), diff --git a/apps/server/src/contexts/invoices/presentation/controllers/index.ts b/apps/server/src/contexts/invoices/presentation/controllers/index.ts index 24358c2b..70c32af4 100644 --- a/apps/server/src/contexts/invoices/presentation/controllers/index.ts +++ b/apps/server/src/contexts/invoices/presentation/controllers/index.ts @@ -1,4 +1,4 @@ -//export * from "./create-invoice"; +export * from "./create-invoice"; //export * from "./delete-invoice"; export * from "./get-invoice"; export * from "./list-invoices"; diff --git a/apps/server/src/routes/invoices.routes.ts b/apps/server/src/routes/invoices.routes.ts index b2cc8fe6..0be36e77 100644 --- a/apps/server/src/routes/invoices.routes.ts +++ b/apps/server/src/routes/invoices.routes.ts @@ -1,10 +1,12 @@ import { validateRequestDTO } from "@common/presentation"; import { + buildCreateInvoiceController, buildGetInvoiceController, buildListInvoicesController, IGetInvoiceRequestSchema, IListInvoicesRequestSchema, } from "@contexts/invoices/presentation"; + import { NextFunction, Request, Response, Router } from "express"; export const invoicesRouter = (appRouter: Router) => { @@ -30,16 +32,17 @@ export const invoicesRouter = (appRouter: Router) => { } ); - /*routes.post( + routes.post( "/", - validateRequestDTO(ICreateInvoiceRequestSchema), - checkTabContext, + //validateRequestDTO(ICreateInvoiceRequestSchema), + //checkTabContext, //checkUser, (req: Request, res: Response, next: NextFunction) => { buildCreateInvoiceController().execute(req, res, next); } ); + /* routes.put( "/:invoiceId", validateRequestDTO(IUpdateInvoiceRequestSchema),