diff --git a/apps/server/package.json b/apps/server/package.json index e244cef6..b1fef837 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -40,8 +40,8 @@ "typescript": "^5.8.3" }, "dependencies": { - "@erp/core": "workspace:*", "@erp/auth": "workspace:*", + "@erp/core": "workspace:*", "@erp/customer-invoices": "workspace:*", "bcrypt": "^5.1.1", "cls-rtracer": "^2.6.3", @@ -49,6 +49,7 @@ "dinero.js": "^1.9.1", "dotenv": "^16.5.0", "express": "^4.18.2", + "express-list-routes": "^1.3.1", "helmet": "^8.0.0", "http": "0.0.1-security", "jsonwebtoken": "^9.0.2", @@ -73,9 +74,14 @@ "node": ">=22" }, "tsup": { - "entry": ["src/index.ts"], + "entry": [ + "src/index.ts" + ], "outDir": "dist", - "format": ["esm", "cjs"], + "format": [ + "esm", + "cjs" + ], "target": "es2020", "sourcemap": true, "clean": true, diff --git a/apps/server/src/index.ts b/apps/server/src/index.ts index 58c12ddb..e68d8215 100644 --- a/apps/server/src/index.ts +++ b/apps/server/src/index.ts @@ -134,8 +134,6 @@ process.on("uncaughtException", (error: Error) => { await initModules({ app, database, baseRoutePath: API_BASE_PATH, logger }); - console.log(listRoutes(app._router, API_BASE_PATH)); - server.listen(currentState.port, () => { server.emit("listening"); @@ -166,6 +164,7 @@ process.on("uncaughtException", (error: Error) => { logger.info(`Server path: ${currentState.appPath}`); logger.info(`Server environment: ${currentState.environment}`); logger.info("To shut down your server, press + C at any time"); + logger.info(JSON.stringify(listRoutes(app._router, API_BASE_PATH), null, 3)); }); } catch (error) { serverError(error as NodeJS.ErrnoException); diff --git a/apps/server/src/lib/list-routes.ts b/apps/server/src/lib/list-routes.ts index 1d5e4622..a2a1ca13 100644 --- a/apps/server/src/lib/list-routes.ts +++ b/apps/server/src/lib/list-routes.ts @@ -1,30 +1,5 @@ // Función para listar rutas -export function listRoutes(appOrRouter, basePath = "") { - const routes = []; - - appOrRouter.stack.forEach((middleware) => { - if (middleware.route) { - // Es una ruta directa - const methods = Object.keys(middleware.route.methods).map((m) => m.toUpperCase()); - routes.push({ - path: basePath + middleware.route.path, - methods, - }); - } else if (middleware.name === "router" && middleware.handle.stack) { - // Es un router anidado - const newBasePath = - basePath + - (middleware.regexp?.source !== "^\\/?$" - ? middleware.regexp - ?.toString() - .replace(/^\/\^\\/, "") - .replace(/\\\/\?\(\?=\\\/\|\$\)\/i$/, "") - .replace(/\\\//g, "/") - : ""); - const childRoutes = listRoutes(middleware.handle, basePath + (middleware?.path || "")); - routes.push(...childRoutes); - } - }); - - return routes; +export function listRoutes(app, basePath = "") { + const expressListRoutes = require("express-list-routes"); + return expressListRoutes(app, { logger: false, prefix: basePath }); } diff --git a/apps/server/src/lib/logger/console-logger.ts b/apps/server/src/lib/logger/console-logger.ts index 32e422e4..39cade34 100644 --- a/apps/server/src/lib/logger/console-logger.ts +++ b/apps/server/src/lib/logger/console-logger.ts @@ -1,4 +1,4 @@ -import { ILogger } from "@erp/core"; +import { ILogger } from "@erp/core/api"; export class ConsoleLogger implements ILogger { info(message: string, meta?: any) { diff --git a/apps/server/src/lib/logger/sentry-logger.ts b/apps/server/src/lib/logger/sentry-logger.ts index be9dce40..dc149c01 100644 --- a/apps/server/src/lib/logger/sentry-logger.ts +++ b/apps/server/src/lib/logger/sentry-logger.ts @@ -1,4 +1,4 @@ -import { ILogger } from "@erp/core"; +import { ILogger } from "@erp/core/api"; export class SentryLogger implements ILogger { // biome-ignore lint/complexity/noUselessConstructor: diff --git a/apps/server/src/lib/logger/winston-logger.ts b/apps/server/src/lib/logger/winston-logger.ts index 87922a2a..8ef487c3 100644 --- a/apps/server/src/lib/logger/winston-logger.ts +++ b/apps/server/src/lib/logger/winston-logger.ts @@ -1,4 +1,4 @@ -import { ILogger } from "@erp/core"; +import { ILogger } from "@erp/core/api"; import rTracer from "cls-rtracer"; import { createLogger, format, transports } from "winston"; @@ -17,7 +17,7 @@ const winston = createLogger({ let message = info.message; if (typeof message === "object") { - message = JSON.stringify(message, null, 3); + message = JSON.stringify(message); } let out = `${timestamp}`; @@ -46,6 +46,9 @@ const winston = createLogger({ }); export class WinstonLogger implements ILogger { + debug(message: string, meta?: any): void { + winston.debug(message, meta ?? {}); + } info(message: string, meta?: any) { winston.info(message, meta ?? {}); } diff --git a/apps/server/src/register-modules.ts b/apps/server/src/register-modules.ts index 1c326671..9667f162 100644 --- a/apps/server/src/register-modules.ts +++ b/apps/server/src/register-modules.ts @@ -1,8 +1,8 @@ import { authAPIModule } from "@erp/auth/api"; -import { invoicesAPIModule } from "@erp/customer-invoices/api"; +import { customerInvoicesAPIModule } from "@erp/customer-invoices/api"; import { registerModule } from "./lib"; export const registerModules = () => { registerModule(authAPIModule); - registerModule(invoicesAPIModule); + registerModule(customerInvoicesAPIModule); }; diff --git a/modules/auth/src/api/index.ts b/modules/auth/src/api/index.ts index ccae0889..0c844552 100644 --- a/modules/auth/src/api/index.ts +++ b/modules/auth/src/api/index.ts @@ -21,3 +21,5 @@ export const authAPIModule: IModuleServer = { }; }, }; + +export default authAPIModule; diff --git a/modules/core/src/common/index.ts b/modules/core/src/common/index.ts index eea524d6..c29f47c1 100644 --- a/modules/core/src/common/index.ts +++ b/modules/core/src/common/index.ts @@ -1 +1,2 @@ +export * from "./dto"; export * from "./types"; diff --git a/modules/core/src/web/lib/data-source/axios/create-axios-data-source.ts b/modules/core/src/web/lib/data-source/axios/create-axios-data-source.ts index 51543eab..0d096652 100644 --- a/modules/core/src/web/lib/data-source/axios/create-axios-data-source.ts +++ b/modules/core/src/web/lib/data-source/axios/create-axios-data-source.ts @@ -17,7 +17,7 @@ export const createAxiosDataSource = (client: AxiosInstance): IDataSource => { getBaseUrl: getBaseUrlOrFail, getList: async (resource: string, params?: Record) => { - const res = await client.get(resource, { params }); + const res = await client.get(resource, params); return res.data; }, diff --git a/modules/customer-invoices/src/api/application/create-customer-invoice.use-case.ts b/modules/customer-invoices/src/api/application/create-customer-invoice.use-case.ts index 4d834fb4..82d51037 100644 --- a/modules/customer-invoices/src/api/application/create-customer-invoice.use-case.ts +++ b/modules/customer-invoices/src/api/application/create-customer-invoice.use-case.ts @@ -1,13 +1,13 @@ import { UniqueID, UtcDate } from "@/core/common/domain"; import { - type ICustomerInvoiceProps, - type ICustomerInvoiceService, type CustomerInvoice, CustomerInvoiceNumber, CustomerInvoiceSerie, CustomerInvoiceStatus, -} from "@/contexts/customerCustomerInvoices/domain"; + type ICustomerInvoiceProps, + type ICustomerInvoiceService, +} from "@/contexts/customer-invoices/domain"; import { ITransactionManager } from "@/core/common/infrastructure/database"; import { logger } from "@/core/logger"; import { Result } from "@repo/rdx-utils"; @@ -15,12 +15,12 @@ import { ICreateCustomerInvoiceRequestDTO } from "../../common/dto"; export class CreateCustomerInvoiceUseCase { constructor( - private readonly customerCustomerInvoiceService: ICustomerInvoiceService, + private readonly customerInvoiceService: ICustomerInvoiceService, private readonly transactionManager: ITransactionManager ) {} public execute( - customerCustomerInvoiceID: UniqueID, + customerInvoiceID: UniqueID, dto: ICreateCustomerInvoiceRequestDTO ): Promise> { return this.transactionManager.complete(async (transaction) => { @@ -32,8 +32,12 @@ export class CreateCustomerInvoiceUseCase { const data = validOrErrors.data; - // Update customerCustomerInvoice with dto - return await this.customerCustomerInvoiceService.createCustomerInvoice(customerCustomerInvoiceID, data, transaction); + // Update customerInvoice with dto + return await this.customerInvoiceService.createCustomerInvoice( + customerInvoiceID, + data, + transaction + ); } catch (error: unknown) { logger.error(error as Error); return Result.fail(error as Error); @@ -41,17 +45,19 @@ export class CreateCustomerInvoiceUseCase { }); } - private validateCustomerInvoiceData(dto: ICreateCustomerInvoiceRequestDTO): Result { + private validateCustomerInvoiceData( + dto: ICreateCustomerInvoiceRequestDTO + ): Result { const errors: Error[] = []; - const customerCustomerInvoiceNumerOrError = CustomerInvoiceNumber.create(dto.customerCustomerInvoice_number); - const customerCustomerInvoiceSeriesOrError = CustomerInvoiceSerie.create(dto.customerCustomerInvoice_series); + const customerInvoiceNumerOrError = CustomerInvoiceNumber.create(dto.customerInvoice_number); + const customerInvoiceSeriesOrError = CustomerInvoiceSerie.create(dto.customerInvoice_series); const issueDateOrError = UtcDate.create(dto.issue_date); const operationDateOrError = UtcDate.create(dto.operation_date); const result = Result.combine([ - customerCustomerInvoiceNumerOrError, - customerCustomerInvoiceSeriesOrError, + customerInvoiceNumerOrError, + customerInvoiceSeriesOrError, issueDateOrError, operationDateOrError, ]); @@ -62,11 +68,11 @@ export class CreateCustomerInvoiceUseCase { const validatedData: ICustomerInvoiceProps = { status: CustomerInvoiceStatus.createDraft(), - customerCustomerInvoiceNumber: customerCustomerInvoiceNumerOrError.data, - customerCustomerInvoiceSeries: customerCustomerInvoiceSeriesOrError.data, + customerInvoiceNumber: customerInvoiceNumerOrError.data, + customerInvoiceSeries: customerInvoiceSeriesOrError.data, issueDate: issueDateOrError.data, operationDate: operationDateOrError.data, - customerCustomerInvoiceCurrency: dto.currency, + customerInvoiceCurrency: dto.currency, }; /*if (errors.length > 0) { @@ -75,14 +81,14 @@ export class CreateCustomerInvoiceUseCase { }*/ return Result.ok(validatedData); - /*let customerCustomerInvoice_status = CustomerInvoiceStatus.create(dto.status).object; - if (customerCustomerInvoice_status.isEmpty()) { - customerCustomerInvoice_status = CustomerInvoiceStatus.createDraft(); + /*let customerInvoice_status = CustomerInvoiceStatus.create(dto.status).object; + if (customerInvoice_status.isEmpty()) { + customerInvoice_status = CustomerInvoiceStatus.createDraft(); } - let customerCustomerInvoice_series = CustomerInvoiceSeries.create(dto.customerCustomerInvoice_series).object; - if (customerCustomerInvoice_series.isEmpty()) { - customerCustomerInvoice_series = CustomerInvoiceSeries.create(dto.customerCustomerInvoice_series).object; + let customerInvoice_series = CustomerInvoiceSeries.create(dto.customerInvoice_series).object; + if (customerInvoice_series.isEmpty()) { + customerInvoice_series = CustomerInvoiceSeries.create(dto.customerInvoice_series).object; } let issue_date = CustomerInvoiceDate.create(dto.issue_date).object; @@ -95,16 +101,16 @@ export class CreateCustomerInvoiceUseCase { operation_date = CustomerInvoiceDate.createCurrentDate().object; } - let customerCustomerInvoiceCurrency = Currency.createFromCode(dto.currency).object; + let customerInvoiceCurrency = Currency.createFromCode(dto.currency).object; - if (customerCustomerInvoiceCurrency.isEmpty()) { - customerCustomerInvoiceCurrency = Currency.createDefaultCode().object; + if (customerInvoiceCurrency.isEmpty()) { + customerInvoiceCurrency = Currency.createDefaultCode().object; } - let customerCustomerInvoiceLanguage = Language.createFromCode(dto.language_code).object; + let customerInvoiceLanguage = Language.createFromCode(dto.language_code).object; - if (customerCustomerInvoiceLanguage.isEmpty()) { - customerCustomerInvoiceLanguage = Language.createDefaultCode().object; + if (customerInvoiceLanguage.isEmpty()) { + customerInvoiceLanguage = Language.createDefaultCode().object; } const items = new Collection( @@ -122,26 +128,26 @@ export class CreateCustomerInvoiceUseCase { ) ); - if (!customerCustomerInvoice_status.isDraft()) { + if (!customerInvoice_status.isDraft()) { throw Error("Error al crear una factura que no es borrador"); } return DraftCustomerInvoice.create( { - customerCustomerInvoiceSeries: customerCustomerInvoice_series, + customerInvoiceSeries: customerInvoice_series, issueDate: issue_date, operationDate: operation_date, - customerCustomerInvoiceCurrency, - language: customerCustomerInvoiceLanguage, - customerCustomerInvoiceNumber: CustomerInvoiceNumber.create(undefined).object, - //notes: Note.create(customerCustomerInvoiceDTO.notes).object, + customerInvoiceCurrency, + language: customerInvoiceLanguage, + customerInvoiceNumber: CustomerInvoiceNumber.create(undefined).object, + //notes: Note.create(customerInvoiceDTO.notes).object, //senderId: UniqueID.create(null).object, recipient, items, }, - customerCustomerInvoiceId + customerInvoiceId );*/ } } diff --git a/modules/customer-invoices/src/api/application/delete-customer-invoice.use-case.ts b/modules/customer-invoices/src/api/application/delete-customer-invoice.use-case.ts index e1214270..0062fd93 100644 --- a/modules/customer-invoices/src/api/application/delete-customer-invoice.use-case.ts +++ b/modules/customer-invoices/src/api/application/delete-customer-invoice.use-case.ts @@ -6,14 +6,17 @@ import { ICustomerInvoiceService } from "../domain"; export class DeleteCustomerInvoiceUseCase { constructor( - private readonly customerCustomerInvoiceService: ICustomerInvoiceService, + private readonly customerInvoiceService: ICustomerInvoiceService, private readonly transactionManager: ITransactionManager ) {} - public execute(customerCustomerInvoiceID: UniqueID): Promise> { + public execute(customerInvoiceID: UniqueID): Promise> { return this.transactionManager.complete(async (transaction) => { try { - return await this.customerCustomerInvoiceService.deleteCustomerInvoiceById(customerCustomerInvoiceID, transaction); + return await this.customerInvoiceService.deleteCustomerInvoiceById( + customerInvoiceID, + transaction + ); } catch (error: unknown) { logger.error(error as Error); return Result.fail(error as Error); diff --git a/modules/customer-invoices/src/api/application/get-customer-invoice.use-case.ts b/modules/customer-invoices/src/api/application/get-customer-invoice.use-case.ts index 691ca67c..c122dddf 100644 --- a/modules/customer-invoices/src/api/application/get-customer-invoice.use-case.ts +++ b/modules/customer-invoices/src/api/application/get-customer-invoice.use-case.ts @@ -2,18 +2,21 @@ import { UniqueID } from "@/core/common/domain"; import { ITransactionManager } from "@/core/common/infrastructure/database"; import { logger } from "@/lib/logger"; import { Result } from "@repo/rdx-utils"; -import { ICustomerInvoiceService, CustomerInvoice } from "../domain"; +import { CustomerInvoice, ICustomerInvoiceService } from "../domain"; export class GetCustomerInvoiceUseCase { constructor( - private readonly customerCustomerInvoiceService: ICustomerInvoiceService, + private readonly customerInvoiceService: ICustomerInvoiceService, private readonly transactionManager: ITransactionManager ) {} - public execute(customerCustomerInvoiceID: UniqueID): Promise> { + public execute(customerInvoiceID: UniqueID): Promise> { return this.transactionManager.complete(async (transaction) => { try { - return await this.customerCustomerInvoiceService.findCustomerInvoiceById(customerCustomerInvoiceID, transaction); + return await this.customerInvoiceService.findCustomerInvoiceById( + customerInvoiceID, + transaction + ); } catch (error: unknown) { logger.error(error as Error); return Result.fail(error as Error); diff --git a/modules/customer-invoices/src/api/application/list-customer-invoices.use-case.ts b/modules/customer-invoices/src/api/application/list-customer-invoices.use-case.ts index b8980404..88416d6e 100644 --- a/modules/customer-invoices/src/api/application/list-customer-invoices.use-case.ts +++ b/modules/customer-invoices/src/api/application/list-customer-invoices.use-case.ts @@ -2,18 +2,18 @@ import { ITransactionManager } from "@erp/core/api"; import { Criteria } from "@repo/rdx-criteria/server"; import { Collection, Result } from "@repo/rdx-utils"; import { Transaction } from "sequelize"; -import { ICustomerInvoiceService, CustomerInvoice } from "../domain"; +import { CustomerInvoice, ICustomerInvoiceService } from "../domain"; export class ListCustomerInvoicesUseCase { constructor( - private readonly customerCustomerInvoiceService: ICustomerInvoiceService, + private readonly customerInvoiceService: ICustomerInvoiceService, private readonly transactionManager: ITransactionManager ) {} public execute(criteria: Criteria): Promise, Error>> { return this.transactionManager.complete(async (transaction: Transaction) => { try { - return await this.customerCustomerInvoiceService.findCustomerInvoices(criteria, transaction); + return await this.customerInvoiceService.findCustomerInvoices(criteria, transaction); } catch (error: unknown) { return Result.fail(error as Error); } diff --git a/modules/customer-invoices/src/api/application/services/participantFinder.ts b/modules/customer-invoices/src/api/application/services/participantFinder.ts index e53b055c..22f5594b 100644 --- a/modules/customer-invoices/src/api/application/services/participantFinder.ts +++ b/modules/customer-invoices/src/api/application/services/participantFinder.ts @@ -1,7 +1,7 @@ /* import { IAdapter, RepositoryBuilder } from "@/contexts/common/domain"; import { UniqueID } from "@shared/contexts"; import { ICustomerInvoiceParticipantRepository } from "../../domain"; -import { CustomerInvoiceCustomer } from "../../domain/entities/customerCustomerInvoice-customer/customerCustomerInvoice-customer"; +import { CustomerInvoiceCustomer } from "../../domain/entities/customer-invoice-customer/customer-invoice-customer"; export const participantFinder = async ( participantId: UniqueID, diff --git a/modules/customer-invoices/src/api/application/update-customer-invoice.use-case.ts b/modules/customer-invoices/src/api/application/update-customer-invoice.use-case.ts index 907dd493..e7a36454 100644 --- a/modules/customer-invoices/src/api/application/update-customer-invoice.use-case.ts +++ b/modules/customer-invoices/src/api/application/update-customer-invoice.use-case.ts @@ -2,16 +2,16 @@ import { UniqueID } from "@/core/common/domain"; import { ITransactionManager } from "@/core/common/infrastructure/database"; import { Result } from "@repo/rdx-utils"; import { IUpdateCustomerInvoiceRequestDTO } from "../../common/dto"; -import { ICustomerInvoiceService, CustomerInvoice } from "../domain"; +import { CustomerInvoice, ICustomerInvoiceService } from "../domain"; export class CreateCustomerInvoiceUseCase { constructor( - private readonly customerCustomerInvoiceService: ICustomerInvoiceService, + private readonly customerInvoiceService: ICustomerInvoiceService, private readonly transactionManager: ITransactionManager ) {} public execute( - customerCustomerInvoiceID: UniqueID, + customerInvoiceID: UniqueID, dto: Partial ): Promise> { return this.transactionManager.complete(async (transaction) => { @@ -25,8 +25,8 @@ export class CreateCustomerInvoiceUseCase { const data = validOrErrors.data; - // Update customerCustomerInvoice with dto - return await this.customerCustomerInvoiceService.updateCustomerInvoiceById(customerCustomerInvoiceID, data, transaction); + // Update customerInvoice with dto + return await this.customerInvoiceService.updateCustomerInvoiceById(customerInvoiceID, data, transaction); } catch (error: unknown) { logger.error(error as Error); return Result.fail(error as Error); @@ -41,41 +41,41 @@ export class CreateCustomerInvoiceUseCase { const errors: Error[] = []; const validatedData: Partial = {}; - // Create customerCustomerInvoice - let customerCustomerInvoice_status = CustomerInvoiceStatus.create(customerCustomerInvoiceDTO.status).object; - if (customerCustomerInvoice_status.isEmpty()) { - customerCustomerInvoice_status = CustomerInvoiceStatus.createDraft(); + // Create customerInvoice + let customerInvoice_status = CustomerInvoiceStatus.create(customerInvoiceDTO.status).object; + if (customerInvoice_status.isEmpty()) { + customerInvoice_status = CustomerInvoiceStatus.createDraft(); } - let customerCustomerInvoice_series = CustomerInvoiceSeries.create(customerCustomerInvoiceDTO.customerCustomerInvoice_series).object; - if (customerCustomerInvoice_series.isEmpty()) { - customerCustomerInvoice_series = CustomerInvoiceSeries.create(customerCustomerInvoiceDTO.customerCustomerInvoice_series).object; + let customerInvoice_series = CustomerInvoiceSeries.create(customerInvoiceDTO.customerInvoice_series).object; + if (customerInvoice_series.isEmpty()) { + customerInvoice_series = CustomerInvoiceSeries.create(customerInvoiceDTO.customerInvoice_series).object; } - let issue_date = CustomerInvoiceDate.create(customerCustomerInvoiceDTO.issue_date).object; + let issue_date = CustomerInvoiceDate.create(customerInvoiceDTO.issue_date).object; if (issue_date.isEmpty()) { issue_date = CustomerInvoiceDate.createCurrentDate().object; } - let operation_date = CustomerInvoiceDate.create(customerCustomerInvoiceDTO.operation_date).object; + let operation_date = CustomerInvoiceDate.create(customerInvoiceDTO.operation_date).object; if (operation_date.isEmpty()) { operation_date = CustomerInvoiceDate.createCurrentDate().object; } - let customerCustomerInvoiceCurrency = Currency.createFromCode(customerCustomerInvoiceDTO.currency).object; + let customerInvoiceCurrency = Currency.createFromCode(customerInvoiceDTO.currency).object; - if (customerCustomerInvoiceCurrency.isEmpty()) { - customerCustomerInvoiceCurrency = Currency.createDefaultCode().object; + if (customerInvoiceCurrency.isEmpty()) { + customerInvoiceCurrency = Currency.createDefaultCode().object; } - let customerCustomerInvoiceLanguage = Language.createFromCode(customerCustomerInvoiceDTO.language_code).object; + let customerInvoiceLanguage = Language.createFromCode(customerInvoiceDTO.language_code).object; - if (customerCustomerInvoiceLanguage.isEmpty()) { - customerCustomerInvoiceLanguage = Language.createDefaultCode().object; + if (customerInvoiceLanguage.isEmpty()) { + customerInvoiceLanguage = Language.createDefaultCode().object; } const items = new Collection( - customerCustomerInvoiceDTO.items?.map( + customerInvoiceDTO.items?.map( (item) => CustomerInvoiceSimpleItem.create({ description: Description.create(item.description).object, @@ -89,26 +89,26 @@ export class CreateCustomerInvoiceUseCase { ) ); - if (!customerCustomerInvoice_status.isDraft()) { + if (!customerInvoice_status.isDraft()) { throw Error("Error al crear una factura que no es borrador"); } return DraftCustomerInvoice.create( { - customerCustomerInvoiceSeries: customerCustomerInvoice_series, + customerInvoiceSeries: customerInvoice_series, issueDate: issue_date, operationDate: operation_date, - customerCustomerInvoiceCurrency, - language: customerCustomerInvoiceLanguage, - customerCustomerInvoiceNumber: CustomerInvoiceNumber.create(undefined).object, - //notes: Note.create(customerCustomerInvoiceDTO.notes).object, + customerInvoiceCurrency, + language: customerInvoiceLanguage, + customerInvoiceNumber: CustomerInvoiceNumber.create(undefined).object, + //notes: Note.create(customerInvoiceDTO.notes).object, //senderId: UniqueID.create(null).object, recipient, items, }, - customerCustomerInvoiceId + customerInvoiceId ); } */ } @@ -152,39 +152,39 @@ export class UpdateCustomerInvoiceUseCase2 id: UniqueID; data: IUpdateCustomerInvoice_DTO; }): Promise { - const { id, data: customerCustomerInvoiceDTO } = request; + const { id, data: customerInvoiceDTO } = request; // Validaciones - const customerCustomerInvoiceDTOOrError = ensureUpdateCustomerInvoice_DTOIsValid(customerCustomerInvoiceDTO); - if (customerCustomerInvoiceDTOOrError.isFailure) { - return this.handleValidationFailure(customerCustomerInvoiceDTOOrError.error); + const customerInvoiceDTOOrError = ensureUpdateCustomerInvoice_DTOIsValid(customerInvoiceDTO); + if (customerInvoiceDTOOrError.isFailure) { + return this.handleValidationFailure(customerInvoiceDTOOrError.error); } const transaction = this._adapter.startTransaction(); - const customerCustomerInvoiceRepoBuilder = this.getRepository("CustomerInvoice"); + const customerInvoiceRepoBuilder = this.getRepository("CustomerInvoice"); - let customerCustomerInvoice: CustomerInvoice | null = null; + let customerInvoice: CustomerInvoice | null = null; try { await transaction.complete(async (t) => { - customerCustomerInvoice = await customerCustomerInvoiceRepoBuilder({ transaction: t }).getById(id); + customerInvoice = await customerInvoiceRepoBuilder({ transaction: t }).getById(id); }); - if (customerCustomerInvoice === null) { + if (customerInvoice === null) { return Result.fail( UseCaseError.create(UseCaseError.NOT_FOUND_ERROR, `CustomerInvoice not found`, { id: request.id.toString(), - entity: "customerCustomerInvoice", + entity: "customerInvoice", }) ); } - return Result.ok(customerCustomerInvoice); + return Result.ok(customerInvoice); } catch (error: unknown) { const _error = error as Error; - if (customerCustomerInvoiceRepoBuilder().isRepositoryError(_error)) { - return this.handleRepositoryError(error as BaseError, customerCustomerInvoiceRepoBuilder()); + if (customerInvoiceRepoBuilder().isRepositoryError(_error)) { + return this.handleRepositoryError(error as BaseError, customerInvoiceRepoBuilder()); } else { return this.handleUnexceptedError(error); } @@ -192,7 +192,7 @@ export class UpdateCustomerInvoiceUseCase2 // Recipient validations const recipientIdOrError = ensureParticipantIdIsValid( - customerCustomerInvoiceDTO?.recipient?.id, + customerInvoiceDTO?.recipient?.id, ); if (recipientIdOrError.isFailure) { return this.handleValidationFailure( @@ -203,7 +203,7 @@ export class UpdateCustomerInvoiceUseCase2 const recipientId = recipientIdOrError.object; const recipientBillingIdOrError = ensureParticipantAddressIdIsValid( - customerCustomerInvoiceDTO?.recipient?.billing_address_id, + customerInvoiceDTO?.recipient?.billing_address_id, ); if (recipientBillingIdOrError.isFailure) { return this.handleValidationFailure( @@ -214,7 +214,7 @@ export class UpdateCustomerInvoiceUseCase2 const recipientBillingId = recipientBillingIdOrError.object; const recipientShippingIdOrError = ensureParticipantAddressIdIsValid( - customerCustomerInvoiceDTO?.recipient?.shipping_address_id, + customerInvoiceDTO?.recipient?.shipping_address_id, ); if (recipientShippingIdOrError.isFailure) { return this.handleValidationFailure( @@ -236,18 +236,18 @@ export class UpdateCustomerInvoiceUseCase2 ); } - // Crear customerCustomerInvoice - const customerCustomerInvoiceOrError = await this.tryUpdateCustomerInvoiceInstance( - customerCustomerInvoiceDTO, - customerCustomerInvoiceIdOrError.object, + // Crear customerInvoice + const customerInvoiceOrError = await this.tryUpdateCustomerInvoiceInstance( + customerInvoiceDTO, + customerInvoiceIdOrError.object, //senderId, //senderBillingId, //senderShippingId, recipientContact, ); - if (customerCustomerInvoiceOrError.isFailure) { - const { error: domainError } = customerCustomerInvoiceOrError; + if (customerInvoiceOrError.isFailure) { + const { error: domainError } = customerInvoiceOrError; let errorCode = ""; let message = ""; @@ -269,46 +269,46 @@ export class UpdateCustomerInvoiceUseCase2 ); } - return this.saveCustomerInvoice(customerCustomerInvoiceOrError.object); + return this.saveCustomerInvoice(customerInvoiceOrError.object); } - private async tryUpdateCustomerInvoiceInstance(customerCustomerInvoiceDTO, customerCustomerInvoiceId, recipient) { - // Create customerCustomerInvoice - let customerCustomerInvoice_status = CustomerInvoiceStatus.create(customerCustomerInvoiceDTO.status).object; - if (customerCustomerInvoice_status.isEmpty()) { - customerCustomerInvoice_status = CustomerInvoiceStatus.createDraft(); + private async tryUpdateCustomerInvoiceInstance(customerInvoiceDTO, customerInvoiceId, recipient) { + // Create customerInvoice + let customerInvoice_status = CustomerInvoiceStatus.create(customerInvoiceDTO.status).object; + if (customerInvoice_status.isEmpty()) { + customerInvoice_status = CustomerInvoiceStatus.createDraft(); } - let customerCustomerInvoice_series = CustomerInvoiceSeries.create(customerCustomerInvoiceDTO.customerCustomerInvoice_series).object; - if (customerCustomerInvoice_series.isEmpty()) { - customerCustomerInvoice_series = CustomerInvoiceSeries.create(customerCustomerInvoiceDTO.customerCustomerInvoice_series).object; + let customerInvoice_series = CustomerInvoiceSeries.create(customerInvoiceDTO.customerInvoice_series).object; + if (customerInvoice_series.isEmpty()) { + customerInvoice_series = CustomerInvoiceSeries.create(customerInvoiceDTO.customerInvoice_series).object; } - let issue_date = CustomerInvoiceDate.create(customerCustomerInvoiceDTO.issue_date).object; + let issue_date = CustomerInvoiceDate.create(customerInvoiceDTO.issue_date).object; if (issue_date.isEmpty()) { issue_date = CustomerInvoiceDate.createCurrentDate().object; } - let operation_date = CustomerInvoiceDate.create(customerCustomerInvoiceDTO.operation_date).object; + let operation_date = CustomerInvoiceDate.create(customerInvoiceDTO.operation_date).object; if (operation_date.isEmpty()) { operation_date = CustomerInvoiceDate.createCurrentDate().object; } - let customerCustomerInvoiceCurrency = Currency.createFromCode(customerCustomerInvoiceDTO.currency).object; + let customerInvoiceCurrency = Currency.createFromCode(customerInvoiceDTO.currency).object; - if (customerCustomerInvoiceCurrency.isEmpty()) { - customerCustomerInvoiceCurrency = Currency.createDefaultCode().object; + if (customerInvoiceCurrency.isEmpty()) { + customerInvoiceCurrency = Currency.createDefaultCode().object; } - let customerCustomerInvoiceLanguage = Language.createFromCode(customerCustomerInvoiceDTO.language_code).object; + let customerInvoiceLanguage = Language.createFromCode(customerInvoiceDTO.language_code).object; - if (customerCustomerInvoiceLanguage.isEmpty()) { - customerCustomerInvoiceLanguage = Language.createDefaultCode().object; + if (customerInvoiceLanguage.isEmpty()) { + customerInvoiceLanguage = Language.createDefaultCode().object; } const items = new Collection( - customerCustomerInvoiceDTO.items?.map( + customerInvoiceDTO.items?.map( (item) => CustomerInvoiceSimpleItem.create({ description: Description.create(item.description).object, @@ -322,26 +322,26 @@ export class UpdateCustomerInvoiceUseCase2 ) ); - if (!customerCustomerInvoice_status.isDraft()) { + if (!customerInvoice_status.isDraft()) { throw Error("Error al crear una factura que no es borrador"); } return DraftCustomerInvoice.create( { - customerCustomerInvoiceSeries: customerCustomerInvoice_series, + customerInvoiceSeries: customerInvoice_series, issueDate: issue_date, operationDate: operation_date, - customerCustomerInvoiceCurrency, - language: customerCustomerInvoiceLanguage, - customerCustomerInvoiceNumber: CustomerInvoiceNumber.create(undefined).object, - //notes: Note.create(customerCustomerInvoiceDTO.notes).object, + customerInvoiceCurrency, + language: customerInvoiceLanguage, + customerInvoiceNumber: CustomerInvoiceNumber.create(undefined).object, + //notes: Note.create(customerInvoiceDTO.notes).object, //senderId: UniqueID.create(null).object, recipient, items, }, - customerCustomerInvoiceId + customerInvoiceId ); } @@ -361,21 +361,21 @@ export class UpdateCustomerInvoiceUseCase2 return contact; } - private async saveCustomerInvoice(customerCustomerInvoice: DraftCustomerInvoice) { + private async saveCustomerInvoice(customerInvoice: DraftCustomerInvoice) { const transaction = this._adapter.startTransaction(); - const customerCustomerInvoiceRepoBuilder = this.getRepository("CustomerInvoice"); + const customerInvoiceRepoBuilder = this.getRepository("CustomerInvoice"); try { await transaction.complete(async (t) => { - const customerCustomerInvoiceRepo = customerCustomerInvoiceRepoBuilder({ transaction: t }); - await customerCustomerInvoiceRepo.save(customerCustomerInvoice); + const customerInvoiceRepo = customerInvoiceRepoBuilder({ transaction: t }); + await customerInvoiceRepo.save(customerInvoice); }); - return Result.ok(customerCustomerInvoice); + return Result.ok(customerInvoice); } catch (error: unknown) { const _error = error as Error; - if (customerCustomerInvoiceRepoBuilder().isRepositoryError(_error)) { - return this.handleRepositoryError(error as BaseError, customerCustomerInvoiceRepoBuilder()); + if (customerInvoiceRepoBuilder().isRepositoryError(_error)) { + return this.handleRepositoryError(error as BaseError, customerInvoiceRepoBuilder()); } else { return this.handleUnexceptedError(error); } diff --git a/modules/customer-invoices/src/api/domain/aggregates/customer-invoice.ts b/modules/customer-invoices/src/api/domain/aggregates/customer-invoice.ts index 202bc275..6c2fc7e7 100644 --- a/modules/customer-invoices/src/api/domain/aggregates/customer-invoice.ts +++ b/modules/customer-invoices/src/api/domain/aggregates/customer-invoice.ts @@ -1,11 +1,15 @@ import { AggregateRoot, MoneyValue, UniqueID, UtcDate } from "@repo/rdx-ddd"; import { Collection, Result } from "@repo/rdx-utils"; import { CustomerInvoiceCustomer, CustomerInvoiceItem, CustomerInvoiceItems } from "../entities"; -import { CustomerInvoiceNumber, CustomerInvoiceSerie, CustomerInvoiceStatus } from "../value-objects"; +import { + CustomerInvoiceNumber, + CustomerInvoiceSerie, + CustomerInvoiceStatus, +} from "../value-objects"; export interface ICustomerInvoiceProps { - customerCustomerInvoiceNumber: CustomerInvoiceNumber; - customerCustomerInvoiceSeries: CustomerInvoiceSerie; + customerInvoiceNumber: CustomerInvoiceNumber; + customerInvoiceSeries: CustomerInvoiceSerie; status: CustomerInvoiceStatus; @@ -15,7 +19,7 @@ export interface ICustomerInvoiceProps { //dueDate: UtcDate; // ? --> depende de la forma de pago //tax: Tax; // ? --> detalles? - customerCustomerInvoiceCurrency: string; + customerInvoiceCurrency: string; //language: Language; @@ -33,8 +37,8 @@ export interface ICustomerInvoiceProps { export interface ICustomerInvoice { id: UniqueID; - customerCustomerInvoiceNumber: CustomerInvoiceNumber; - customerCustomerInvoiceSeries: CustomerInvoiceSerie; + customerInvoiceNumber: CustomerInvoiceNumber; + customerInvoiceSeries: CustomerInvoiceSerie; status: CustomerInvoiceStatus; @@ -49,7 +53,7 @@ export interface ICustomerInvoice { //tax: Tax; //language: Language; - customerCustomerInvoiceCurrency: string; + customerInvoiceCurrency: string; //purchareOrderNumber: string; //notes: Note; @@ -64,7 +68,10 @@ export interface ICustomerInvoice { calculateTotal: () => MoneyValue; } -export class CustomerInvoice extends AggregateRoot implements ICustomerInvoice { +export class CustomerInvoice + extends AggregateRoot + implements ICustomerInvoice +{ private _items!: Collection; //protected _status: CustomerInvoiceStatus; @@ -75,25 +82,25 @@ export class CustomerInvoice extends AggregateRoot implem } static create(props: ICustomerInvoiceProps, id?: UniqueID): Result { - const customerCustomerInvoice = new CustomerInvoice(props, id); + const customerInvoice = new CustomerInvoice(props, id); // Reglas de negocio / validaciones // ... // ... // 🔹 Disparar evento de dominio "CustomerInvoiceAuthenticatedEvent" - //const { customerCustomerInvoice } = props; - //user.addDomainEvent(new CustomerInvoiceAuthenticatedEvent(id, customerCustomerInvoice.toString())); + //const { customerInvoice } = props; + //user.addDomainEvent(new CustomerInvoiceAuthenticatedEvent(id, customerInvoice.toString())); - return Result.ok(customerCustomerInvoice); + return Result.ok(customerInvoice); } - get customerCustomerInvoiceNumber() { - return this.props.customerCustomerInvoiceNumber; + get customerInvoiceNumber() { + return this.props.customerInvoiceNumber; } - get customerCustomerInvoiceSeries() { - return this.props.customerCustomerInvoiceSeries; + get customerInvoiceSeries() { + return this.props.customerInvoiceSeries; } get issueDate() { @@ -152,8 +159,8 @@ export class CustomerInvoice extends AggregateRoot implem return this.props.shipTo; }*/ - get customerCustomerInvoiceCurrency() { - return this.props.customerCustomerInvoiceCurrency; + get customerInvoiceCurrency() { + return this.props.customerInvoiceCurrency; } /*get notes() { @@ -174,29 +181,29 @@ export class CustomerInvoice extends AggregateRoot implem }*/ calculateSubtotal(): MoneyValue { - const customerCustomerInvoiceSubtotal = MoneyValue.create({ + const customerInvoiceSubtotal = MoneyValue.create({ amount: 0, - currency_code: this.props.customerCustomerInvoiceCurrency, + currency_code: this.props.customerInvoiceCurrency, scale: 2, }).data; return this._items.getAll().reduce((subtotal, item) => { return subtotal.add(item.calculateTotal()); - }, customerCustomerInvoiceSubtotal); + }, customerInvoiceSubtotal); } - // Method to calculate the total tax in the customerCustomerInvoice + // Method to calculate the total tax in the customerInvoice calculateTaxTotal(): MoneyValue { const taxTotal = MoneyValue.create({ amount: 0, - currency_code: this.props.customerCustomerInvoiceCurrency, + currency_code: this.props.customerInvoiceCurrency, scale: 2, }).data; return taxTotal; } - // Method to calculate the total customerCustomerInvoice amount, including taxes + // Method to calculate the total customerInvoice amount, including taxes calculateTotal(): MoneyValue { return this.calculateSubtotal().add(this.calculateTaxTotal()); } diff --git a/modules/customer-invoices/src/api/domain/aggregates/index.ts b/modules/customer-invoices/src/api/domain/aggregates/index.ts index 269b3869..8fdd6983 100644 --- a/modules/customer-invoices/src/api/domain/aggregates/index.ts +++ b/modules/customer-invoices/src/api/domain/aggregates/index.ts @@ -1 +1 @@ -export * from "./customerCustomerInvoice"; +export * from "./customer-invoice"; diff --git a/modules/customer-invoices/src/api/domain/entities/index.ts b/modules/customer-invoices/src/api/domain/entities/index.ts index 9bd1a505..4c02277f 100644 --- a/modules/customer-invoices/src/api/domain/entities/index.ts +++ b/modules/customer-invoices/src/api/domain/entities/index.ts @@ -1,2 +1,2 @@ -export * from "./customerCustomerInvoice-customer"; -export * from "./customerCustomerInvoice-items"; +export * from "./invoice-customer"; +export * from "./invoice-items"; diff --git a/modules/customer-invoices/src/api/domain/entities/invoice-customer/index.ts b/modules/customer-invoices/src/api/domain/entities/invoice-customer/index.ts index 10cc3e27..6d725810 100644 --- a/modules/customer-invoices/src/api/domain/entities/invoice-customer/index.ts +++ b/modules/customer-invoices/src/api/domain/entities/invoice-customer/index.ts @@ -1,2 +1 @@ -export * from "./customerCustomerInvoice-address"; -export * from "./customerCustomerInvoice-customer"; +export * from "./invoice-customer"; diff --git a/modules/customer-invoices/src/api/domain/entities/invoice-customer/invoice-customer.ts b/modules/customer-invoices/src/api/domain/entities/invoice-customer/invoice-customer.ts index b178e664..ea9571a3 100644 --- a/modules/customer-invoices/src/api/domain/entities/invoice-customer/invoice-customer.ts +++ b/modules/customer-invoices/src/api/domain/entities/invoice-customer/invoice-customer.ts @@ -1,6 +1,6 @@ import { DomainEntity, Name, TINNumber, UniqueID } from "@repo/rdx-ddd"; import { Result } from "@repo/rdx-utils"; -import { CustomerInvoiceAddress } from "./customerCustomerInvoice-address"; +import { CustomerInvoiceAddress } from "./customer-invoice-address"; export interface ICustomerInvoiceCustomerProps { tin: TINNumber; diff --git a/modules/customer-invoices/src/api/domain/entities/invoice-items/index.ts b/modules/customer-invoices/src/api/domain/entities/invoice-items/index.ts index b47e3dad..f95bd889 100644 --- a/modules/customer-invoices/src/api/domain/entities/invoice-items/index.ts +++ b/modules/customer-invoices/src/api/domain/entities/invoice-items/index.ts @@ -1,2 +1,2 @@ -export * from "./customerCustomerInvoice-item"; -export * from "./customerCustomerInvoice-items"; +export * from "./invoice-item"; +export * from "./invoice-items"; diff --git a/modules/customer-invoices/src/api/domain/entities/invoice-items/invoice-item.test.ts b/modules/customer-invoices/src/api/domain/entities/invoice-items/invoice-item.test.ts index c6ae1974..fc725e8c 100644 --- a/modules/customer-invoices/src/api/domain/entities/invoice-items/invoice-item.test.ts +++ b/modules/customer-invoices/src/api/domain/entities/invoice-items/invoice-item.test.ts @@ -1,6 +1,6 @@ import { MoneyValue, Percentage, Quantity } from "@/core/common/domain"; import { CustomerInvoiceItemDescription } from "../../value-objects"; -import { CustomerInvoiceItem } from "./customerCustomerInvoice-item"; +import { CustomerInvoiceItem } from "./customer-invoice-item"; describe("CustomerInvoiceItem", () => { it("debería calcular correctamente el subtotal (unitPrice * quantity)", () => { @@ -14,8 +14,8 @@ describe("CustomerInvoiceItem", () => { const result = CustomerInvoiceItem.create(props); expect(result.isOk()).toBe(true); - const customerCustomerInvoiceItem = result.unwrap(); - expect(customerCustomerInvoiceItem.subtotalPrice.value).toBe(100); // 50 * 2 + const customerInvoiceItem = result.unwrap(); + expect(customerInvoiceItem.subtotalPrice.value).toBe(100); // 50 * 2 }); it("debería calcular correctamente el total con descuento", () => { @@ -29,8 +29,8 @@ describe("CustomerInvoiceItem", () => { const result = CustomerInvoiceItem.create(props); expect(result.isOk()).toBe(true); - const customerCustomerInvoiceItem = result.unwrap(); - expect(customerCustomerInvoiceItem.totalPrice.value).toBe(81); // (30 * 3) - 10% de (30 * 3) + const customerInvoiceItem = result.unwrap(); + expect(customerInvoiceItem.totalPrice.value).toBe(81); // (30 * 3) - 10% de (30 * 3) }); it("debería devolver los valores correctos de las propiedades", () => { @@ -44,11 +44,11 @@ describe("CustomerInvoiceItem", () => { const result = CustomerInvoiceItem.create(props); expect(result.isOk()).toBe(true); - const customerCustomerInvoiceItem = result.unwrap(); - expect(customerCustomerInvoiceItem.description.value).toBe("Producto C"); - expect(customerCustomerInvoiceItem.quantity.value).toBe(1); - expect(customerCustomerInvoiceItem.unitPrice.value).toBe(100); - expect(customerCustomerInvoiceItem.discount.value).toBe(5); + const customerInvoiceItem = result.unwrap(); + expect(customerInvoiceItem.description.value).toBe("Producto C"); + expect(customerInvoiceItem.quantity.value).toBe(1); + expect(customerInvoiceItem.unitPrice.value).toBe(100); + expect(customerInvoiceItem.discount.value).toBe(5); }); it("debería manejar correctamente un descuento del 0%", () => { @@ -62,8 +62,8 @@ describe("CustomerInvoiceItem", () => { const result = CustomerInvoiceItem.create(props); expect(result.isOk()).toBe(true); - const customerCustomerInvoiceItem = result.unwrap(); - expect(customerCustomerInvoiceItem.totalPrice.value).toBe(100); // 25 * 4 + const customerInvoiceItem = result.unwrap(); + expect(customerInvoiceItem.totalPrice.value).toBe(100); // 25 * 4 }); it("debería manejar correctamente un descuento del 100%", () => { @@ -77,7 +77,7 @@ describe("CustomerInvoiceItem", () => { const result = CustomerInvoiceItem.create(props); expect(result.isOk()).toBe(true); - const customerCustomerInvoiceItem = result.unwrap(); - expect(customerCustomerInvoiceItem.totalPrice.value).toBe(0); // (50 * 2) - 100% de (50 * 2) + const customerInvoiceItem = result.unwrap(); + expect(customerInvoiceItem.totalPrice.value).toBe(0); // (50 * 2) - 100% de (50 * 2) }); }); diff --git a/modules/customer-invoices/src/api/domain/entities/invoice-items/invoice-item.ts b/modules/customer-invoices/src/api/domain/entities/invoice-items/invoice-item.ts index fb9f2280..81a04d27 100644 --- a/modules/customer-invoices/src/api/domain/entities/invoice-items/invoice-item.ts +++ b/modules/customer-invoices/src/api/domain/entities/invoice-items/invoice-item.ts @@ -28,11 +28,17 @@ export interface ICustomerInvoiceItem { totalPrice: CustomerInvoiceItemTotalPrice; } -export class CustomerInvoiceItem extends DomainEntity implements ICustomerInvoiceItem { +export class CustomerInvoiceItem + extends DomainEntity + implements ICustomerInvoiceItem +{ private _subtotalPrice!: CustomerInvoiceItemSubtotalPrice; private _totalPrice!: CustomerInvoiceItemTotalPrice; - public static create(props: ICustomerInvoiceItemProps, id?: UniqueID): Result { + public static create( + props: ICustomerInvoiceItemProps, + id?: UniqueID + ): Result { const item = new CustomerInvoiceItem(props, id); // Reglas de negocio / validaciones @@ -40,8 +46,8 @@ export class CustomerInvoiceItem extends DomainEntity // ... // 🔹 Disparar evento de dominio "CustomerInvoiceItemCreatedEvent" - //const { customerCustomerInvoice } = props; - //user.addDomainEvent(new CustomerInvoiceAuthenticatedEvent(id, customerCustomerInvoice.toString())); + //const { customerInvoice } = props; + //user.addDomainEvent(new CustomerInvoiceAuthenticatedEvent(id, customerInvoice.toString())); return Result.ok(item); } diff --git a/modules/customer-invoices/src/api/domain/entities/invoice-items/invoice-items.ts b/modules/customer-invoices/src/api/domain/entities/invoice-items/invoice-items.ts index c7e66814..02ce2168 100644 --- a/modules/customer-invoices/src/api/domain/entities/invoice-items/invoice-items.ts +++ b/modules/customer-invoices/src/api/domain/entities/invoice-items/invoice-items.ts @@ -1,5 +1,5 @@ import { Collection } from "@repo/rdx-utils"; -import { CustomerInvoiceItem } from "./customerCustomerInvoice-item"; +import { CustomerInvoiceItem } from "./customer-invoice-item"; export class CustomerInvoiceItems extends Collection { public static create(items?: CustomerInvoiceItem[]): CustomerInvoiceItems { diff --git a/modules/customer-invoices/src/api/domain/repositories/customer-invoice-repository.interface.ts b/modules/customer-invoices/src/api/domain/repositories/customer-invoice-repository.interface.ts index b0bdba96..0f37d9cb 100644 --- a/modules/customer-invoices/src/api/domain/repositories/customer-invoice-repository.interface.ts +++ b/modules/customer-invoices/src/api/domain/repositories/customer-invoice-repository.interface.ts @@ -4,10 +4,13 @@ import { Collection, Result } from "@repo/rdx-utils"; import { CustomerInvoice } from "../aggregates"; export interface ICustomerInvoiceRepository { - findAll(criteria: Criteria, transaction?: any): Promise, Error>>; + findAll( + criteria: Criteria, + transaction?: any + ): Promise, Error>>; getById(id: UniqueID, transaction?: any): Promise>; deleteById(id: UniqueID, transaction?: any): Promise>; - create(customerCustomerInvoice: CustomerInvoice, transaction?: any): Promise; - update(customerCustomerInvoice: CustomerInvoice, transaction?: any): Promise; + create(customerInvoice: CustomerInvoice, transaction?: any): Promise; + update(customerInvoice: CustomerInvoice, transaction?: any): Promise; } diff --git a/modules/customer-invoices/src/api/domain/repositories/index.ts b/modules/customer-invoices/src/api/domain/repositories/index.ts index 7c01a70c..d149dde6 100644 --- a/modules/customer-invoices/src/api/domain/repositories/index.ts +++ b/modules/customer-invoices/src/api/domain/repositories/index.ts @@ -1 +1 @@ -export * from "./customerCustomerInvoice-repository.interface"; +export * from "./customer-invoice-repository.interface"; diff --git a/modules/customer-invoices/src/api/domain/services/customer-invoice-service.interface.ts b/modules/customer-invoices/src/api/domain/services/customer-invoice-service.interface.ts index e01f3b24..80f71b9b 100644 --- a/modules/customer-invoices/src/api/domain/services/customer-invoice-service.interface.ts +++ b/modules/customer-invoices/src/api/domain/services/customer-invoice-service.interface.ts @@ -1,23 +1,32 @@ import { Criteria } from "@repo/rdx-criteria/server"; import { UniqueID } from "@repo/rdx-ddd"; import { Collection, Result } from "@repo/rdx-utils"; -import { ICustomerInvoiceProps, CustomerInvoice } from "../aggregates"; +import { CustomerInvoice, ICustomerInvoiceProps } from "../aggregates"; export interface ICustomerInvoiceService { - findCustomerInvoices(criteria: Criteria, transaction?: any): Promise, Error>>; - findCustomerInvoiceById(customerCustomerInvoiceId: UniqueID, transaction?: any): Promise>; + findCustomerInvoices( + criteria: Criteria, + transaction?: any + ): Promise, Error>>; + findCustomerInvoiceById( + customerInvoiceId: UniqueID, + transaction?: any + ): Promise>; updateCustomerInvoiceById( - customerCustomerInvoiceId: UniqueID, + customerInvoiceId: UniqueID, data: Partial, transaction?: any ): Promise>; createCustomerInvoice( - customerCustomerInvoiceId: UniqueID, + customerInvoiceId: UniqueID, data: ICustomerInvoiceProps, transaction?: any ): Promise>; - deleteCustomerInvoiceById(customerCustomerInvoiceId: UniqueID, transaction?: any): Promise>; + deleteCustomerInvoiceById( + customerInvoiceId: UniqueID, + transaction?: any + ): Promise>; } diff --git a/modules/customer-invoices/src/api/domain/services/customer-invoice.service.ts b/modules/customer-invoices/src/api/domain/services/customer-invoice.service.ts index da330a3f..d9111248 100644 --- a/modules/customer-invoices/src/api/domain/services/customer-invoice.service.ts +++ b/modules/customer-invoices/src/api/domain/services/customer-invoice.service.ts @@ -2,9 +2,9 @@ import { Criteria } from "@repo/rdx-criteria/server"; import { UniqueID } from "@repo/rdx-ddd"; import { Collection, Result } from "@repo/rdx-utils"; import { Transaction } from "sequelize"; -import { ICustomerInvoiceProps, CustomerInvoice } from "../aggregates"; +import { CustomerInvoice, ICustomerInvoiceProps } from "../aggregates"; import { ICustomerInvoiceRepository } from "../repositories"; -import { ICustomerInvoiceService } from "./customerCustomerInvoice-service.interface"; +import { ICustomerInvoiceService } from "./customer-invoice-service.interface"; export class CustomerInvoiceService implements ICustomerInvoiceService { constructor(private readonly repo: ICustomerInvoiceRepository) {} @@ -13,39 +13,42 @@ export class CustomerInvoiceService implements ICustomerInvoiceService { criteria: Criteria, transaction?: Transaction ): Promise, Error>> { - const customerCustomerInvoicesOrError = await this.repo.findAll(criteria, transaction); - if (customerCustomerInvoicesOrError.isFailure) { - return Result.fail(customerCustomerInvoicesOrError.error); + const customerInvoicesOrError = await this.repo.findAll(criteria, transaction); + if (customerInvoicesOrError.isFailure) { + return Result.fail(customerInvoicesOrError.error); } // Solo devolver usuarios activos - //const allCustomerInvoices = customerCustomerInvoicesOrError.data.filter((customerCustomerInvoice) => customerCustomerInvoice.isActive); + //const allCustomerInvoices = customerInvoicesOrError.data.filter((customerInvoice) => customerInvoice.isActive); //return Result.ok(new Collection(allCustomerInvoices)); - return customerCustomerInvoicesOrError; + return customerInvoicesOrError; } - async findCustomerInvoiceById(customerCustomerInvoiceId: UniqueID, transaction?: Transaction): Promise> { - return await this.repo.getById(customerCustomerInvoiceId, transaction); + async findCustomerInvoiceById( + customerInvoiceId: UniqueID, + transaction?: Transaction + ): Promise> { + return await this.repo.getById(customerInvoiceId, transaction); } async updateCustomerInvoiceById( - customerCustomerInvoiceId: UniqueID, + customerInvoiceId: UniqueID, data: Partial, transaction?: Transaction ): Promise> { // Verificar si la factura existe - const customerCustomerInvoiceOrError = await this.repo.getById(customerCustomerInvoiceId, transaction); - if (customerCustomerInvoiceOrError.isFailure) { + const customerInvoiceOrError = await this.repo.getById(customerInvoiceId, transaction); + if (customerInvoiceOrError.isFailure) { return Result.fail(new Error("CustomerInvoice not found")); } return Result.fail(new Error("No implementado")); - /*const updatedCustomerInvoiceOrError = CustomerInvoice.update(customerCustomerInvoiceOrError.data, data); + /*const updatedCustomerInvoiceOrError = CustomerInvoice.update(customerInvoiceOrError.data, data); if (updatedCustomerInvoiceOrError.isFailure) { return Result.fail( - new Error(`Error updating customerCustomerInvoice: ${updatedCustomerInvoiceOrError.error.message}`) + new Error(`Error updating customerInvoice: ${updatedCustomerInvoiceOrError.error.message}`) ); } @@ -56,19 +59,21 @@ export class CustomerInvoiceService implements ICustomerInvoiceService { } async createCustomerInvoice( - customerCustomerInvoiceId: UniqueID, + customerInvoiceId: UniqueID, data: ICustomerInvoiceProps, transaction?: Transaction ): Promise> { // Verificar si la factura existe - const customerCustomerInvoiceOrError = await this.repo.getById(customerCustomerInvoiceId, transaction); - if (customerCustomerInvoiceOrError.isSuccess) { + const customerInvoiceOrError = await this.repo.getById(customerInvoiceId, transaction); + if (customerInvoiceOrError.isSuccess) { return Result.fail(new Error("CustomerInvoice exists")); } - const newCustomerInvoiceOrError = CustomerInvoice.create(data, customerCustomerInvoiceId); + const newCustomerInvoiceOrError = CustomerInvoice.create(data, customerInvoiceId); if (newCustomerInvoiceOrError.isFailure) { - return Result.fail(new Error(`Error creating customerCustomerInvoice: ${newCustomerInvoiceOrError.error.message}`)); + return Result.fail( + new Error(`Error creating customerInvoice: ${newCustomerInvoiceOrError.error.message}`) + ); } const newCustomerInvoice = newCustomerInvoiceOrError.data; @@ -78,9 +83,9 @@ export class CustomerInvoiceService implements ICustomerInvoiceService { } async deleteCustomerInvoiceById( - customerCustomerInvoiceId: UniqueID, + customerInvoiceId: UniqueID, transaction?: Transaction ): Promise> { - return this.repo.deleteById(customerCustomerInvoiceId, transaction); + return this.repo.deleteById(customerInvoiceId, transaction); } } diff --git a/modules/customer-invoices/src/api/domain/services/index.ts b/modules/customer-invoices/src/api/domain/services/index.ts index 980f0a59..9927fb2f 100644 --- a/modules/customer-invoices/src/api/domain/services/index.ts +++ b/modules/customer-invoices/src/api/domain/services/index.ts @@ -1,2 +1,2 @@ -export * from "./customerCustomerInvoice-service.interface"; -export * from "./customerCustomerInvoice.service"; +export * from "./customer-invoice-service.interface"; +export * from "./customer-invoice.service"; diff --git a/modules/customer-invoices/src/api/domain/value-objects/index.ts b/modules/customer-invoices/src/api/domain/value-objects/index.ts index ac042c70..382b9fb3 100644 --- a/modules/customer-invoices/src/api/domain/value-objects/index.ts +++ b/modules/customer-invoices/src/api/domain/value-objects/index.ts @@ -1,10 +1,10 @@ -export * from "./customerCustomerInvoice-address-type"; -export * from "./customerCustomerInvoice-item-description"; -export * from "./customerCustomerInvoice-item-discount"; -export * from "./customerCustomerInvoice-item-quantity"; -export * from "./customerCustomerInvoice-item-subtotal-price"; -export * from "./customerCustomerInvoice-item-total-price"; -export * from "./customerCustomerInvoice-item-unit-price"; -export * from "./customerCustomerInvoice-number"; -export * from "./customerCustomerInvoice-serie"; -export * from "./customerCustomerInvoice-status"; +export * from "./customer-invoice-address-type"; +export * from "./customer-invoice-item-description"; +export * from "./customer-invoice-item-discount"; +export * from "./customer-invoice-item-quantity"; +export * from "./customer-invoice-item-subtotal-price"; +export * from "./customer-invoice-item-total-price"; +export * from "./customer-invoice-item-unit-price"; +export * from "./customer-invoice-number"; +export * from "./customer-invoice-serie"; +export * from "./customer-invoice-status"; diff --git a/modules/customer-invoices/src/api/index.ts b/modules/customer-invoices/src/api/index.ts index 9adb9f03..7c8fd8f8 100644 --- a/modules/customer-invoices/src/api/index.ts +++ b/modules/customer-invoices/src/api/index.ts @@ -1,20 +1,22 @@ import { IModuleServer, ModuleParams } from "@erp/core/api"; -import { customerCustomerInvoicesRouter, models } from "./infrastructure"; +import { customerInvoicesRouter, models } from "./infrastructure"; -export const customerCustomerInvoicesAPIModule: IModuleServer = { - name: "customerCustomerInvoices", +export const customerInvoicesAPIModule: IModuleServer = { + name: "customer-invoices", version: "1.0.0", dependencies: [], init(params: ModuleParams) { // const contacts = getService("contacts"); const { logger } = params; - customerCustomerInvoicesRouter(params); - logger.info("🚀 CustomerInvoices module initialized", { label: "customerCustomerInvoices" }); + customerInvoicesRouter(params); + logger.info("🚀 CustomerInvoices module initialized", { label: "customer-invoices" }); }, registerDependencies(params) { const { database, logger } = params; - logger.info("🚀 CustomerInvoices module dependencies registered", { label: "customerCustomerInvoices" }); + logger.info("🚀 CustomerInvoices module dependencies registered", { + label: "customer-invoices", + }); return { models, services: { @@ -24,3 +26,5 @@ export const customerCustomerInvoicesAPIModule: IModuleServer = { }; }, }; + +export default customerInvoicesAPIModule; diff --git a/modules/customer-invoices/src/api/infrastructure/express/customer-invoices.routes.ts b/modules/customer-invoices/src/api/infrastructure/express/customer-invoices.routes.ts index 684a87a5..03513de7 100644 --- a/modules/customer-invoices/src/api/infrastructure/express/customer-invoices.routes.ts +++ b/modules/customer-invoices/src/api/infrastructure/express/customer-invoices.routes.ts @@ -1,13 +1,14 @@ -import { ModuleParams } from "@erp/core/api"; +import { ILogger, ModuleParams } from "@erp/core/api"; import { Application, NextFunction, Request, Response, Router } from "express"; import { Sequelize } from "sequelize"; import { buildListCustomerInvoicesController } from "../../presentation"; -export const customerCustomerInvoicesRouter = (params: ModuleParams) => { - const { app, database, baseRoutePath } = params as { +export const customerInvoicesRouter = (params: ModuleParams) => { + const { app, database, baseRoutePath, logger } = params as { app: Application; database: Sequelize; baseRoutePath: string; + logger: ILogger; }; const routes: Router = Router({ mergeParams: true }); @@ -21,10 +22,10 @@ export const customerCustomerInvoicesRouter = (params: ModuleParams) => { } ); - app.use(`${baseRoutePath}/customerCustomerInvoices`, routes); + app.use(`${baseRoutePath}/customer-invoices`, routes); /*routes.get( - "/:customerCustomerInvoiceId", + "/:customerInvoiceId", //checkTabContext, //checkUser, (req: Request, res: Response, next: NextFunction) => { @@ -43,7 +44,7 @@ export const customerCustomerInvoicesRouter = (params: ModuleParams) => { ); routes.put( - "/:customerCustomerInvoiceId", + "/:customerInvoiceId", validateAndParseBody(IUpdateCustomerInvoiceRequestSchema), checkTabContext, //checkUser, @@ -53,7 +54,7 @@ export const customerCustomerInvoicesRouter = (params: ModuleParams) => { ); routes.delete( - "/:customerCustomerInvoiceId", + "/:customerInvoiceId", validateAndParseBody(IDeleteCustomerInvoiceRequestSchema), checkTabContext, //checkUser, diff --git a/modules/customer-invoices/src/api/infrastructure/express/index.ts b/modules/customer-invoices/src/api/infrastructure/express/index.ts index 8208e6c2..057b5b4d 100644 --- a/modules/customer-invoices/src/api/infrastructure/express/index.ts +++ b/modules/customer-invoices/src/api/infrastructure/express/index.ts @@ -1 +1 @@ -export * from "./customerInvoices.routes"; +export * from "./customer-invoices.routes"; diff --git a/modules/customer-invoices/src/api/infrastructure/mappers/customer-invoice-item.mapper.ts b/modules/customer-invoices/src/api/infrastructure/mappers/customer-invoice-item.mapper.ts index 529826a3..697f0b41 100644 --- a/modules/customer-invoices/src/api/infrastructure/mappers/customer-invoice-item.mapper.ts +++ b/modules/customer-invoices/src/api/infrastructure/mappers/customer-invoice-item.mapper.ts @@ -10,13 +10,25 @@ import { CustomerInvoiceItemQuantity, CustomerInvoiceItemUnitPrice, } from "../../domain"; -import { CustomerInvoiceItemCreationAttributes, CustomerInvoiceItemModel, CustomerInvoiceModel } from "../sequelize"; +import { + CustomerInvoiceItemCreationAttributes, + CustomerInvoiceItemModel, + CustomerInvoiceModel, +} from "../sequelize"; export interface ICustomerInvoiceItemMapper - extends ISequelizeMapper {} + extends ISequelizeMapper< + CustomerInvoiceItemModel, + CustomerInvoiceItemCreationAttributes, + CustomerInvoiceItem + > {} export class CustomerInvoiceItemMapper - extends SequelizeMapper + extends SequelizeMapper< + CustomerInvoiceItemModel, + CustomerInvoiceItemCreationAttributes, + CustomerInvoiceItem + > implements ICustomerInvoiceItemMapper { public mapToDomain( @@ -50,7 +62,7 @@ export class CustomerInvoiceItemMapper const unitPriceOrError = CustomerInvoiceItemUnitPrice.create({ amount: source.unit_price_amount, scale: source.unit_price_scale, - currency_code: sourceParent.customerCustomerInvoice_currency, + currency_code: sourceParent.invoice_currency, }); if (unitPriceOrError.isFailure) { return Result.fail(unitPriceOrError.error); @@ -101,7 +113,7 @@ export class CustomerInvoiceItemMapper const lineData = { parent_id: undefined, - customerCustomerInvoice_id: sourceParent.id.toPrimitive(), + invoice_id: sourceParent.id.toPrimitive(), item_type: "simple", position: index, diff --git a/modules/customer-invoices/src/api/infrastructure/mappers/customer-invoice.mapper.ts b/modules/customer-invoices/src/api/infrastructure/mappers/customer-invoice.mapper.ts index b4932dff..8616461a 100644 --- a/modules/customer-invoices/src/api/infrastructure/mappers/customer-invoice.mapper.ts +++ b/modules/customer-invoices/src/api/infrastructure/mappers/customer-invoice.mapper.ts @@ -1,37 +1,49 @@ import { ISequelizeMapper, MapperParamsType, SequelizeMapper } from "@erp/core/api"; import { UniqueID, UtcDate } from "@repo/rdx-ddd"; import { Result } from "@repo/rdx-utils"; -import { CustomerInvoice, CustomerInvoiceNumber, CustomerInvoiceSerie, CustomerInvoiceStatus } from "../../domain"; +import { + CustomerInvoice, + CustomerInvoiceNumber, + CustomerInvoiceSerie, + CustomerInvoiceStatus, +} from "../../domain"; import { CustomerInvoiceCreationAttributes, CustomerInvoiceModel } from "../sequelize"; -import { CustomerInvoiceItemMapper } from "./customerCustomerInvoice-item.mapper"; +import { CustomerInvoiceItemMapper } from "./customer-invoice-item.mapper"; export interface ICustomerInvoiceMapper - extends ISequelizeMapper {} + extends ISequelizeMapper< + CustomerInvoiceModel, + CustomerInvoiceCreationAttributes, + CustomerInvoice + > {} export class CustomerInvoiceMapper extends SequelizeMapper implements ICustomerInvoiceMapper { - private customerCustomerInvoiceItemMapper: CustomerInvoiceItemMapper; + private customerInvoiceItemMapper: CustomerInvoiceItemMapper; constructor() { super(); - this.customerCustomerInvoiceItemMapper = new CustomerInvoiceItemMapper(); // Instanciar el mapper de items + this.customerInvoiceItemMapper = new CustomerInvoiceItemMapper(); // Instanciar el mapper de items } - public mapToDomain(source: CustomerInvoiceModel, params?: MapperParamsType): Result { + public mapToDomain( + source: CustomerInvoiceModel, + params?: MapperParamsType + ): Result { const idOrError = UniqueID.create(source.id); - const statusOrError = CustomerInvoiceStatus.create(source.customerCustomerInvoice_status); - const customerCustomerInvoiceSeriesOrError = CustomerInvoiceSerie.create(source.customerCustomerInvoice_series); - const customerCustomerInvoiceNumberOrError = CustomerInvoiceNumber.create(source.customerCustomerInvoice_number); + const statusOrError = CustomerInvoiceStatus.create(source.invoice_status); + const customerInvoiceSeriesOrError = CustomerInvoiceSerie.create(source.invoice_series); + const customerInvoiceNumberOrError = CustomerInvoiceNumber.create(source.invoice_number); const issueDateOrError = UtcDate.create(source.issue_date); const operationDateOrError = UtcDate.create(source.operation_date); const result = Result.combine([ idOrError, statusOrError, - customerCustomerInvoiceSeriesOrError, - customerCustomerInvoiceNumberOrError, + customerInvoiceSeriesOrError, + customerInvoiceNumberOrError, issueDateOrError, operationDateOrError, ]); @@ -41,7 +53,7 @@ export class CustomerInvoiceMapper } // Mapear los items de la factura - const itemsOrErrors = this.customerCustomerInvoiceItemMapper.mapArrayToDomain(source.items, { + const itemsOrErrors = this.customerInvoiceItemMapper.mapArrayToDomain(source.items, { sourceParent: source, ...params, }); @@ -50,37 +62,40 @@ export class CustomerInvoiceMapper return Result.fail(itemsOrErrors.error); } - const customerCustomerInvoiceCurrency = source.customerCustomerInvoice_currency || "EUR"; + const customerInvoiceCurrency = source.invoice_currency || "EUR"; return CustomerInvoice.create( { status: statusOrError.data, - customerCustomerInvoiceSeries: customerCustomerInvoiceSeriesOrError.data, - customerCustomerInvoiceNumber: customerCustomerInvoiceNumberOrError.data, + customerInvoiceSeries: customerInvoiceSeriesOrError.data, + customerInvoiceNumber: customerInvoiceNumberOrError.data, issueDate: issueDateOrError.data, operationDate: operationDateOrError.data, - customerCustomerInvoiceCurrency, + customerInvoiceCurrency, items: itemsOrErrors.data, }, idOrError.data ); } - public mapToPersistence(source: CustomerInvoice, params?: MapperParamsType): CustomerInvoiceCreationAttributes { + public mapToPersistence( + source: CustomerInvoice, + params?: MapperParamsType + ): CustomerInvoiceCreationAttributes { const subtotal = source.calculateSubtotal(); const total = source.calculateTotal(); - const items = this.customerCustomerInvoiceItemMapper.mapCollectionToPersistence(source.items, params); + const items = this.customerInvoiceItemMapper.mapCollectionToPersistence(source.items, params); return { id: source.id.toString(), - customerCustomerInvoice_status: source.status.toPrimitive(), - customerCustomerInvoice_series: source.customerCustomerInvoiceSeries.toPrimitive(), - customerCustomerInvoice_number: source.customerCustomerInvoiceNumber.toPrimitive(), + invoice_status: source.status.toPrimitive(), + invoice_series: source.customerInvoiceSeries.toPrimitive(), + invoice_number: source.customerInvoiceNumber.toPrimitive(), issue_date: source.issueDate.toPrimitive(), operation_date: source.operationDate.toPrimitive(), - customerCustomerInvoice_language: "es", - customerCustomerInvoice_currency: source.customerCustomerInvoiceCurrency || "EUR", + invoice_language: "es", + invoice_currency: source.customerInvoiceCurrency || "EUR", subtotal_amount: subtotal.amount, subtotal_scale: subtotal.scale, @@ -93,5 +108,5 @@ export class CustomerInvoiceMapper } } -const customerCustomerInvoiceMapper: CustomerInvoiceMapper = new CustomerInvoiceMapper(); -export { customerCustomerInvoiceMapper }; +const customerInvoiceMapper: CustomerInvoiceMapper = new CustomerInvoiceMapper(); +export { customerInvoiceMapper }; diff --git a/modules/customer-invoices/src/api/infrastructure/mappers/customer-invoiceParticipant.mapper.ts.bak b/modules/customer-invoices/src/api/infrastructure/mappers/customer-invoiceParticipant.mapper.ts.bak index 00132616..42757756 100644 --- a/modules/customer-invoices/src/api/infrastructure/mappers/customer-invoiceParticipant.mapper.ts.bak +++ b/modules/customer-invoices/src/api/infrastructure/mappers/customer-invoiceParticipant.mapper.ts.bak @@ -12,7 +12,7 @@ import { CustomerInvoiceParticipant_Model, TCreationCustomerInvoiceParticipant_M import { ICustomerInvoiceParticipantAddressMapper, createCustomerInvoiceParticipantAddressMapper, -} from "./customerCustomerInvoiceParticipantAddress.mapper"; +} from "./customer-invoiceParticipantAddress.mapper"; export interface ICustomerInvoiceParticipantMapper extends ISequelizeMapper< @@ -99,7 +99,7 @@ class CustomerInvoiceParticipantMapper const { sourceParent } = params; return { - customerCustomerInvoice_id: sourceParent.id.toPrimitive(), + customerInvoice_id: sourceParent.id.toPrimitive(), participant_id: source.id.toPrimitive(), tin: source.tin.toPrimitive(), diff --git a/modules/customer-invoices/src/api/infrastructure/mappers/index.ts b/modules/customer-invoices/src/api/infrastructure/mappers/index.ts index 35281a9e..5d78e8fc 100644 --- a/modules/customer-invoices/src/api/infrastructure/mappers/index.ts +++ b/modules/customer-invoices/src/api/infrastructure/mappers/index.ts @@ -1 +1 @@ -export * from "./customerCustomerInvoice.mapper"; +export * from "./customer-invoice.mapper"; diff --git a/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoice-item.model.ts b/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoice-item.model.ts index d41b0e87..750db504 100644 --- a/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoice-item.model.ts +++ b/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoice-item.model.ts @@ -7,19 +7,19 @@ import { NonAttribute, Sequelize, } from "sequelize"; -import { CustomerInvoiceModel } from "./customerCustomerInvoice.model"; +import { CustomerInvoiceModel } from "./customer-invoice.model"; export type CustomerInvoiceItemCreationAttributes = InferCreationAttributes< CustomerInvoiceItemModel, - { omit: "customerCustomerInvoice" } + { omit: "invoice" } >; export class CustomerInvoiceItemModel extends Model< InferAttributes, - InferCreationAttributes + InferCreationAttributes > { declare item_id: string; - declare customerCustomerInvoice_id: string; + declare invoice_id: string; declare parent_id: CreationOptional; declare position: number; @@ -42,14 +42,14 @@ export class CustomerInvoiceItemModel extends Model< declare total_amount: CreationOptional; declare total_scale: CreationOptional; - declare customerCustomerInvoice: NonAttribute; + declare invoice: NonAttribute; static associate(database: Sequelize) { - /*const { CustomerInvoice_Model, CustomerInvoiceItem_Model } = connection.models; + /*const { Invoice_Model, CustomerInvoiceItem_Model } = connection.models; - CustomerInvoiceItem_Model.belongsTo(CustomerInvoice_Model, { - as: "customerCustomerInvoice", - foreignKey: "customerCustomerInvoice_id", + CustomerInvoiceItem_Model.belongsTo(Invoice_Model, { + as: "customerInvoice", + foreignKey: "invoice_id", onDelete: "CASCADE", });*/ } @@ -62,7 +62,7 @@ export default (database: Sequelize) => { type: new DataTypes.UUID(), primaryKey: true, }, - customerCustomerInvoice_id: { + invoice_id: { type: new DataTypes.UUID(), primaryKey: true, }, @@ -159,7 +159,7 @@ export default (database: Sequelize) => { }, { sequelize: database, - tableName: "customerCustomerInvoice_items", + tableName: "customer_invoice_items", defaultScope: {}, diff --git a/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoice.model.ts b/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoice.model.ts index b473b2ae..b1e9460a 100644 --- a/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoice.model.ts +++ b/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoice.model.ts @@ -7,9 +7,15 @@ import { NonAttribute, Sequelize, } from "sequelize"; -import { CustomerInvoiceItemCreationAttributes, CustomerInvoiceItemModel } from "./customerCustomerInvoice-item.model"; +import { + CustomerInvoiceItemCreationAttributes, + CustomerInvoiceItemModel, +} from "./customer-invoice-item.model"; -export type CustomerInvoiceCreationAttributes = InferCreationAttributes & { +export type CustomerInvoiceCreationAttributes = InferCreationAttributes< + CustomerInvoiceModel, + { omit: "items" } +> & { items?: CustomerInvoiceItemCreationAttributes[]; }; @@ -19,13 +25,13 @@ export class CustomerInvoiceModel extends Model< > { declare id: string; - declare customerCustomerInvoice_status: string; - declare customerCustomerInvoice_series: CreationOptional; - declare customerCustomerInvoice_number: CreationOptional; + declare invoice_status: string; + declare invoice_series: CreationOptional; + declare invoice_number: CreationOptional; declare issue_date: CreationOptional; declare operation_date: CreationOptional; - declare customerCustomerInvoice_language: string; - declare customerCustomerInvoice_currency: string; + declare invoice_language: string; + declare invoice_currency: string; // Subtotal declare subtotal_amount: CreationOptional; @@ -44,7 +50,7 @@ export class CustomerInvoiceModel extends Model< CustomerInvoiceModel.hasMany(CustomerInvoiceItemModel, { as: "items", - foreignKey: "customerCustomerInvoice_id", + foreignKey: "invoice_id", onDelete: "CASCADE", }); } @@ -58,18 +64,18 @@ export default (database: Sequelize) => { primaryKey: true, }, - customerCustomerInvoice_status: { + invoice_status: { type: new DataTypes.STRING(), allowNull: false, }, - customerCustomerInvoice_series: { + invoice_series: { type: new DataTypes.STRING(), allowNull: true, defaultValue: null, }, - customerCustomerInvoice_number: { + invoice_number: { type: new DataTypes.STRING(), allowNull: true, defaultValue: null, @@ -87,12 +93,12 @@ export default (database: Sequelize) => { defaultValue: null, }, - customerCustomerInvoice_language: { + invoice_language: { type: new DataTypes.STRING(), allowNull: false, }, - customerCustomerInvoice_currency: { + invoice_currency: { type: new DataTypes.STRING(3), // ISO 4217 allowNull: false, }, @@ -121,7 +127,7 @@ export default (database: Sequelize) => { }, { sequelize: database, - tableName: "customerCustomerInvoices", + tableName: "customer_invoices", paranoid: true, // softs deletes timestamps: true, @@ -130,7 +136,7 @@ export default (database: Sequelize) => { updatedAt: "updated_at", deletedAt: "deleted_at", - indexes: [{ unique: true, fields: ["customerCustomerInvoice_number"] }], + indexes: [{ unique: true, fields: ["invoice_number"] }], whereMergeStrategy: "and", // <- cómo tratar el merge de un scope diff --git a/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoice.repository.ts b/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoice.repository.ts index a0ea0d06..1d65b403 100644 --- a/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoice.repository.ts +++ b/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoice.repository.ts @@ -3,12 +3,15 @@ import { Criteria } from "@repo/rdx-criteria/server"; import { UniqueID } from "@repo/rdx-ddd"; import { Collection, Result } from "@repo/rdx-utils"; import { Sequelize, Transaction } from "sequelize"; -import { ICustomerInvoiceRepository, CustomerInvoice } from "../../domain"; -import { ICustomerInvoiceMapper } from "../mappers/customerCustomerInvoice.mapper"; -import { CustomerInvoiceItemModel } from "./customerCustomerInvoice-item.model"; -import { CustomerInvoiceModel } from "./customerCustomerInvoice.model"; +import { CustomerInvoice, ICustomerInvoiceRepository } from "../../domain"; +import { ICustomerInvoiceMapper } from "../mappers/customer-invoice.mapper"; +import { CustomerInvoiceItemModel } from "./customer-invoice-item.model"; +import { CustomerInvoiceModel } from "./customer-invoice.model"; -export class CustomerInvoiceRepository extends SequelizeRepository implements ICustomerInvoiceRepository { +export class CustomerInvoiceRepository + extends SequelizeRepository + implements ICustomerInvoiceRepository +{ private readonly _mapper!: ICustomerInvoiceMapper; /** @@ -27,11 +30,14 @@ export class CustomerInvoiceRepository extends SequelizeRepository> { + async customerInvoiceExists( + id: UniqueID, + transaction?: Transaction + ): Promise> { try { - const _customerCustomerInvoice = await this._getById(CustomerInvoiceModel, id, {}, transaction); + const _customerInvoice = await this._getById(CustomerInvoiceModel, id, {}, transaction); - return Result.ok(Boolean(id.equals(_customerCustomerInvoice.id))); + return Result.ok(Boolean(id.equals(_customerInvoice.id))); } catch (error: any) { return this._handleDatabaseError(error, this._customErrorMapper); } @@ -53,8 +59,6 @@ export class CustomerInvoiceRepository extends SequelizeRepository { - const customerCustomerInvoiceData = this._mapper.mapToPersistence(customerCustomerInvoice); - await this._save(CustomerInvoiceModel, customerCustomerInvoice.id, customerCustomerInvoiceData, {}, transaction); + async create(customerInvoice: CustomerInvoice, transaction?: Transaction): Promise { + const customerInvoiceData = this._mapper.mapToPersistence(customerInvoice); + await this._save( + CustomerInvoiceModel, + customerInvoice.id, + customerInvoiceData, + {}, + transaction + ); } - async update(customerCustomerInvoice: CustomerInvoice, transaction?: Transaction): Promise { - const customerCustomerInvoiceData = this._mapper.mapToPersistence(customerCustomerInvoice); - await this._save(CustomerInvoiceModel, customerCustomerInvoice.id, customerCustomerInvoiceData, {}, transaction); + async update(customerInvoice: CustomerInvoice, transaction?: Transaction): Promise { + const customerInvoiceData = this._mapper.mapToPersistence(customerInvoice); + await this._save( + CustomerInvoiceModel, + customerInvoice.id, + customerInvoiceData, + {}, + transaction + ); } } diff --git a/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoiceParticipant.mo.del.ts.bak b/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoiceParticipant.mo.del.ts.bak index 02853177..540df678 100644 --- a/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoiceParticipant.mo.del.ts.bak +++ b/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoiceParticipant.mo.del.ts.bak @@ -7,15 +7,15 @@ import { NonAttribute, Sequelize, } from "sequelize"; -import { CustomerInvoiceModel } from "./customerCustomerInvoice.model"; +import { CustomerInvoiceModel } from "./customer-invoice.model"; import { CustomerInvoiceParticipantAddress_Model, TCreationCustomerInvoiceParticipantAddress_Model, -} from "./customerCustomerInvoiceParticipantAddress.mo.del.ts.bak"; +} from "./customer-invoiceParticipantAddress.mo.del.ts.bak"; export type TCreationCustomerInvoiceParticipant_Model = InferCreationAttributes< CustomerInvoiceParticipant_Model, - { omit: "shippingAddress" | "billingAddress" | "customerCustomerInvoice" } + { omit: "shippingAddress" | "billingAddress" | "customerInvoice" } > & { billingAddress: TCreationCustomerInvoiceParticipantAddress_Model; shippingAddress: TCreationCustomerInvoiceParticipantAddress_Model; @@ -24,11 +24,11 @@ export type TCreationCustomerInvoiceParticipant_Model = InferCreationAttributes< export class CustomerInvoiceParticipant_Model extends Model< InferAttributes< CustomerInvoiceParticipant_Model, - { omit: "shippingAddress" | "billingAddress" | "customerCustomerInvoice" } + { omit: "shippingAddress" | "billingAddress" | "customerInvoice" } >, InferCreationAttributes< CustomerInvoiceParticipant_Model, - { omit: "shippingAddress" | "billingAddress" | "customerCustomerInvoice" } + { omit: "shippingAddress" | "billingAddress" | "customerInvoice" } > > { static associate(connection: Sequelize) { @@ -36,8 +36,8 @@ export class CustomerInvoiceParticipant_Model extends Model< connection.models; CustomerInvoiceParticipant_Model.belongsTo(CustomerInvoice_Model, { - as: "customerCustomerInvoice", - foreignKey: "customerCustomerInvoice_id", + as: "customerInvoice", + foreignKey: "customerInvoice_id", onDelete: "CASCADE", }); @@ -55,7 +55,7 @@ export class CustomerInvoiceParticipant_Model extends Model< } declare participant_id: string; - declare customerCustomerInvoice_id: string; + declare customerInvoice_id: string; declare tin: CreationOptional; declare company_name: CreationOptional; declare first_name: CreationOptional; @@ -64,7 +64,7 @@ export class CustomerInvoiceParticipant_Model extends Model< declare shippingAddress?: NonAttribute; declare billingAddress?: NonAttribute; - declare customerCustomerInvoice?: NonAttribute; + declare customerInvoice?: NonAttribute; } export default (sequelize: Sequelize) => { @@ -74,7 +74,7 @@ export default (sequelize: Sequelize) => { type: new DataTypes.UUID(), primaryKey: true, }, - customerCustomerInvoice_id: { + customerInvoice_id: { type: new DataTypes.UUID(), primaryKey: true, }, @@ -97,7 +97,7 @@ export default (sequelize: Sequelize) => { }, { sequelize, - tableName: "customerCustomerInvoice_participants", + tableName: "customerInvoice_participants", timestamps: false, } ); diff --git a/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoiceParticipantAddress.mo.del.ts.bak b/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoiceParticipantAddress.mo.del.ts.bak index 3c638d21..86dc4f78 100644 --- a/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoiceParticipantAddress.mo.del.ts.bak +++ b/modules/customer-invoices/src/api/infrastructure/sequelize/customer-invoiceParticipantAddress.mo.del.ts.bak @@ -7,7 +7,7 @@ import { NonAttribute, Sequelize, } from "sequelize"; -import { CustomerInvoiceParticipant_Model } from "./customerCustomerInvoiceParticipant.mo.del.ts.bak"; +import { CustomerInvoiceParticipant_Model } from "./customer-invoiceParticipant.mo.del.ts.bak"; export type TCreationCustomerInvoiceParticipantAddress_Model = InferCreationAttributes< CustomerInvoiceParticipantAddress_Model, @@ -86,7 +86,7 @@ export default (sequelize: Sequelize) => { }, { sequelize, - tableName: "customerCustomerInvoice_participant_addresses", + tableName: "customerInvoice_participant_addresses", } ); diff --git a/modules/customer-invoices/src/api/infrastructure/sequelize/index.ts b/modules/customer-invoices/src/api/infrastructure/sequelize/index.ts index 6af5daf1..7359e748 100644 --- a/modules/customer-invoices/src/api/infrastructure/sequelize/index.ts +++ b/modules/customer-invoices/src/api/infrastructure/sequelize/index.ts @@ -1,9 +1,9 @@ -import customerCustomerInvoiceItemModelInit from "./customerCustomerInvoice-item.model"; -import customerCustomerInvoiceModelInit from "./customerCustomerInvoice.model"; +import customerInvoiceItemModelInit from "./customer-invoice-item.model"; +import customerInvoiceModelInit from "./customer-invoice.model"; -export * from "./customerCustomerInvoice-item.model"; // exporta las clases, tipos -export * from "./customerCustomerInvoice.model"; -export * from "./customerCustomerInvoice.repository"; +export * from "./customer-invoice-item.model"; // exporta las clases, tipos +export * from "./customer-invoice.model"; +export * from "./customer-invoice.repository"; // Array de inicializadores para que registerModels() lo use -export const models = [customerCustomerInvoiceItemModelInit, customerCustomerInvoiceModelInit]; +export const models = [customerInvoiceItemModelInit, customerInvoiceModelInit]; diff --git a/modules/customer-invoices/src/api/presentation/delete-invoice/delete-invoice.controller.ts.bak b/modules/customer-invoices/src/api/presentation/delete-invoice/delete-invoice.controller.ts.bak index 13b28f26..ca4b152c 100644 --- a/modules/customer-invoices/src/api/presentation/delete-invoice/delete-invoice.controller.ts.bak +++ b/modules/customer-invoices/src/api/presentation/delete-invoice/delete-invoice.controller.ts.bak @@ -1,4 +1,4 @@ -import { DeleteCustomerInvoiceUseCase } from "@/contexts/customerCustomerInvoices/application"; +import { DeleteCustomerInvoiceUseCase } from "@/contexts/customer-invoices/application"; import { ExpressController } from "@/core/common/presentation"; export class DeleteCustomerInvoiceController extends ExpressController { diff --git a/modules/customer-invoices/src/api/presentation/delete-invoice/index.ts.bak b/modules/customer-invoices/src/api/presentation/delete-invoice/index.ts.bak index 4b9084ed..9f3445fb 100644 --- a/modules/customer-invoices/src/api/presentation/delete-invoice/index.ts.bak +++ b/modules/customer-invoices/src/api/presentation/delete-invoice/index.ts.bak @@ -1,14 +1,14 @@ -import { DeleteCustomerInvoiceUseCase } from "@/contexts/customerCustomerInvoices/application"; -import { CustomerInvoiceService } from "@/contexts/customerCustomerInvoices/domain"; -import { customerCustomerInvoiceRepository } from "@/contexts/customerCustomerInvoices/intrastructure"; +import { DeleteCustomerInvoiceUseCase } from "@/contexts/customer-invoices/application"; +import { CustomerInvoiceService } from "@/contexts/customer-invoices/domain"; +import { customerInvoiceRepository } from "@/contexts/customer-invoices/intrastructure"; import { SequelizeTransactionManager } from "@/core/common/infrastructure"; import { DeleteCustomerInvoiceController } from "./delete-customer-invoice.controller"; export const buildDeleteCustomerInvoiceController = () => { const transactionManager = new SequelizeTransactionManager(); - const customerCustomerInvoiceService = new CustomerInvoiceService(customerCustomerInvoiceRepository); + const customerInvoiceService = new CustomerInvoiceService(customerInvoiceRepository); - const useCase = new DeleteCustomerInvoiceUseCase(customerCustomerInvoiceService, transactionManager); + const useCase = new DeleteCustomerInvoiceUseCase(customerInvoiceService, transactionManager); return new DeleteCustomerInvoiceController(useCase); }; diff --git a/modules/customer-invoices/src/api/presentation/get-invoice/get-invoice.controller.ts b/modules/customer-invoices/src/api/presentation/get-invoice/get-invoice.controller.ts index 97bbe63c..5ca0370c 100644 --- a/modules/customer-invoices/src/api/presentation/get-invoice/get-invoice.controller.ts +++ b/modules/customer-invoices/src/api/presentation/get-invoice/get-invoice.controller.ts @@ -12,19 +12,22 @@ export class GetCustomerInvoiceController extends ExpressController { } protected async executeImpl() { - const { customerCustomerInvoiceId } = this.req.params; + const { customerInvoiceId } = this.req.params; // Validar ID - const customerCustomerInvoiceIdOrError = UniqueID.create(customerCustomerInvoiceId); - if (customerCustomerInvoiceIdOrError.isFailure) return this.invalidInputError("CustomerInvoice ID not valid"); + const customerInvoiceIdOrError = UniqueID.create(customerInvoiceId); + if (customerInvoiceIdOrError.isFailure) + return this.invalidInputError("CustomerInvoice ID not valid"); - const customerCustomerInvoiceOrError = await this.getCustomerInvoice.execute(customerCustomerInvoiceIdOrError.data); + const customerInvoiceOrError = await this.getCustomerInvoice.execute( + customerInvoiceIdOrError.data + ); - if (customerCustomerInvoiceOrError.isFailure) { - return this.handleError(customerCustomerInvoiceOrError.error); + if (customerInvoiceOrError.isFailure) { + return this.handleError(customerInvoiceOrError.error); } - return this.ok(this.presenter.toDTO(customerCustomerInvoiceOrError.data)); + return this.ok(this.presenter.toDTO(customerInvoiceOrError.data)); } private handleError(error: Error) { diff --git a/modules/customer-invoices/src/api/presentation/get-invoice/index.ts b/modules/customer-invoices/src/api/presentation/get-invoice/index.ts index 21e0d3d0..c1c22dd9 100644 --- a/modules/customer-invoices/src/api/presentation/get-invoice/index.ts +++ b/modules/customer-invoices/src/api/presentation/get-invoice/index.ts @@ -1,23 +1,18 @@ import { SequelizeTransactionManager } from "@erp/core/api"; import { Sequelize } from "sequelize"; import { CustomerInvoiceService } from "../../domain"; -import { CustomerInvoiceRepository, customerCustomerInvoiceMapper } from "../../infrastructure"; +import { CustomerInvoiceRepository, customerInvoiceMapper } from "../../infrastructure"; import { GetCustomerInvoiceUseCase } from "../../application"; -import { GetCustomerInvoiceController } from "./get-customer-invoice.controller"; +import { GetCustomerInvoiceController } from "./get-invoice.controller"; import { getCustomerInvoicePresenter } from "./presenter"; export const buildGetCustomerInvoiceController = (database: Sequelize) => { const transactionManager = new SequelizeTransactionManager(database); - const customerCustomerInvoiceRepository = new CustomerInvoiceRepository( - database, - customerCustomerInvoiceMapper - ); - const customerCustomerInvoiceService = new CustomerInvoiceService( - customerCustomerInvoiceRepository - ); + const customerInvoiceRepository = new CustomerInvoiceRepository(database, customerInvoiceMapper); + const customerInvoiceService = new CustomerInvoiceService(customerInvoiceRepository); - const useCase = new GetCustomerInvoiceUseCase(customerCustomerInvoiceService, transactionManager); + const useCase = new GetCustomerInvoiceUseCase(customerInvoiceService, transactionManager); const presenter = getCustomerInvoicePresenter; return new GetCustomerInvoiceController(useCase, presenter); diff --git a/modules/customer-invoices/src/api/presentation/get-invoice/presenter/InvoiceItem.presenter.ts.bak b/modules/customer-invoices/src/api/presentation/get-invoice/presenter/InvoiceItem.presenter.ts.bak index 14bcb5d3..2ee2211c 100644 --- a/modules/customer-invoices/src/api/presentation/get-invoice/presenter/InvoiceItem.presenter.ts.bak +++ b/modules/customer-invoices/src/api/presentation/get-invoice/presenter/InvoiceItem.presenter.ts.bak @@ -2,7 +2,7 @@ import { CustomerInvoiceItem } from "#/server/domain"; import { IInvoicingContext } from "#/server/intrastructure"; import { Collection } from "@rdx/core"; -export const customerCustomerInvoiceItemPresenter = (items: Collection, context: IInvoicingContext) => +export const customerInvoiceItemPresenter = (items: Collection, context: IInvoicingContext) => items.totalCount > 0 ? items.items.map((item: CustomerInvoiceItem) => ({ description: item.description.toString(), diff --git a/modules/customer-invoices/src/api/presentation/get-invoice/presenter/get-invoice.presenter.ts b/modules/customer-invoices/src/api/presentation/get-invoice/presenter/get-invoice.presenter.ts index 9a4fdd93..579ea79a 100644 --- a/modules/customer-invoices/src/api/presentation/get-invoice/presenter/get-invoice.presenter.ts +++ b/modules/customer-invoices/src/api/presentation/get-invoice/presenter/get-invoice.presenter.ts @@ -1,27 +1,27 @@ -import { IGetCustomerInvoiceResponseDTO } from "../../../../../common/dto"; -import { CustomerInvoice, CustomerInvoiceItem } from "../../../../domain"; +import { IGetCustomerInvoiceResponseDTO } from "../../../../common/dto"; +import { CustomerInvoice, CustomerInvoiceItem } from "../../../domain"; export interface IGetCustomerInvoicePresenter { - toDTO: (customerCustomerInvoice: CustomerInvoice) => IGetCustomerInvoiceResponseDTO; + toDTO: (customerInvoice: CustomerInvoice) => IGetCustomerInvoiceResponseDTO; } export const getCustomerInvoicePresenter: IGetCustomerInvoicePresenter = { - toDTO: (customerCustomerInvoice: CustomerInvoice): IGetCustomerInvoiceResponseDTO => ({ - id: customerCustomerInvoice.id.toPrimitive(), + toDTO: (customerInvoice: CustomerInvoice): IGetCustomerInvoiceResponseDTO => ({ + id: customerInvoice.id.toPrimitive(), - customerCustomerInvoice_status: customerCustomerInvoice.status.toString(), - customerCustomerInvoice_number: customerCustomerInvoice.customerCustomerInvoiceNumber.toString(), - customerCustomerInvoice_series: customerCustomerInvoice.customerCustomerInvoiceSeries.toString(), - issue_date: customerCustomerInvoice.issueDate.toDateString(), - operation_date: customerCustomerInvoice.operationDate.toDateString(), + customerInvoice_status: customerInvoice.status.toString(), + customerInvoice_number: customerInvoice.customerInvoiceNumber.toString(), + customerInvoice_series: customerInvoice.customerInvoiceSeries.toString(), + issue_date: customerInvoice.issueDate.toDateString(), + operation_date: customerInvoice.operationDate.toDateString(), language_code: "ES", - currency: customerCustomerInvoice.customerCustomerInvoiceCurrency.toString(), - subtotal: customerCustomerInvoice.calculateSubtotal().toPrimitive(), - total: customerCustomerInvoice.calculateTotal().toPrimitive(), + currency: customerInvoice.customerInvoiceCurrency.toString(), + subtotal: customerInvoice.calculateSubtotal().toPrimitive(), + total: customerInvoice.calculateTotal().toPrimitive(), items: - customerCustomerInvoice.items.size() > 0 - ? customerCustomerInvoice.items.map((item: CustomerInvoiceItem) => ({ + customerInvoice.items.size() > 0 + ? customerInvoice.items.map((item: CustomerInvoiceItem) => ({ description: item.description.toString(), quantity: item.quantity.toPrimitive(), unit_measure: "", @@ -32,10 +32,10 @@ export const getCustomerInvoicePresenter: IGetCustomerInvoicePresenter = { })) : [], - //sender: {}, //await CustomerInvoiceParticipantPresenter(customerCustomerInvoice.senderId, context), + //sender: {}, //await CustomerInvoiceParticipantPresenter(customerInvoice.senderId, context), - /*recipient: await CustomerInvoiceParticipantPresenter(customerCustomerInvoice.recipient, context), - items: customerCustomerInvoiceItemPresenter(customerCustomerInvoice.items, context), + /*recipient: await CustomerInvoiceParticipantPresenter(customerInvoice.recipient, context), + items: customerInvoiceItemPresenter(customerInvoice.items, context), payment_term: { payment_type: "", @@ -43,7 +43,7 @@ export const getCustomerInvoicePresenter: IGetCustomerInvoicePresenter = { }, due_amount: { - currency: customerCustomerInvoice.currency.toString(), + currency: customerInvoice.currency.toString(), precision: 2, amount: 0, }, diff --git a/modules/customer-invoices/src/api/presentation/get-invoice/presenter/index.ts b/modules/customer-invoices/src/api/presentation/get-invoice/presenter/index.ts index cb348805..60624c19 100644 --- a/modules/customer-invoices/src/api/presentation/get-invoice/presenter/index.ts +++ b/modules/customer-invoices/src/api/presentation/get-invoice/presenter/index.ts @@ -1 +1 @@ -export * from "./get-customer-invoice.presenter"; +export * from "./get-invoice.presenter"; diff --git a/modules/customer-invoices/src/api/presentation/index.ts b/modules/customer-invoices/src/api/presentation/index.ts index e8b38dc2..635099c6 100644 --- a/modules/customer-invoices/src/api/presentation/index.ts +++ b/modules/customer-invoices/src/api/presentation/index.ts @@ -1,5 +1,5 @@ //export * from "./create-customer-invoice"; //export * from "./delete-customer-invoice"; -export * from "./get-customer-invoice"; -export * from "./list-customer-invoices"; +export * from "./get-invoice"; +export * from "./list-invoices"; ///export * from "./update-customer-invoice"; diff --git a/modules/customer-invoices/src/api/presentation/list-invoices/index.ts b/modules/customer-invoices/src/api/presentation/list-invoices/index.ts index febf50e9..69d7b827 100644 --- a/modules/customer-invoices/src/api/presentation/list-invoices/index.ts +++ b/modules/customer-invoices/src/api/presentation/list-invoices/index.ts @@ -2,24 +2,16 @@ import { SequelizeTransactionManager } from "@erp/core/api"; import { Sequelize } from "sequelize"; import { ListCustomerInvoicesUseCase } from "../../application"; import { CustomerInvoiceService } from "../../domain"; -import { CustomerInvoiceRepository, customerCustomerInvoiceMapper } from "../../infrastructure"; -import { ListCustomerInvoicesController } from "./list-customer-invoices.controller"; +import { CustomerInvoiceRepository, customerInvoiceMapper } from "../../infrastructure"; +import { ListCustomerInvoicesController } from "./list-invoices.controller"; import { listCustomerInvoicesPresenter } from "./presenter"; export const buildListCustomerInvoicesController = (database: Sequelize) => { const transactionManager = new SequelizeTransactionManager(database); - const customerCustomerInvoiceRepository = new CustomerInvoiceRepository( - database, - customerCustomerInvoiceMapper - ); - const customerCustomerInvoiceService = new CustomerInvoiceService( - customerCustomerInvoiceRepository - ); + const customerInvoiceRepository = new CustomerInvoiceRepository(database, customerInvoiceMapper); + const customerInvoiceService = new CustomerInvoiceService(customerInvoiceRepository); - const useCase = new ListCustomerInvoicesUseCase( - customerCustomerInvoiceService, - transactionManager - ); + const useCase = new ListCustomerInvoicesUseCase(customerInvoiceService, transactionManager); const presenter = listCustomerInvoicesPresenter; return new ListCustomerInvoicesController(useCase, presenter); diff --git a/modules/customer-invoices/src/api/presentation/list-invoices/list-invoices.controller.ts b/modules/customer-invoices/src/api/presentation/list-invoices/list-invoices.controller.ts index afe0e9ba..4c335bff 100644 --- a/modules/customer-invoices/src/api/presentation/list-invoices/list-invoices.controller.ts +++ b/modules/customer-invoices/src/api/presentation/list-invoices/list-invoices.controller.ts @@ -1,6 +1,6 @@ import { ExpressController } from "@erp/core/api"; import { ListCustomerInvoicesUseCase } from "../../application"; -import { IListCustomerInvoicesPresenter } from "./presenter"; +import { IListCustomerInvoicesPresenter } from "./presenter/list-invoices.presenter"; export class ListCustomerInvoicesController extends ExpressController { public constructor( @@ -12,13 +12,13 @@ export class ListCustomerInvoicesController extends ExpressController { protected async executeImpl() { const criteria = this.criteria; - const customerCustomerInvoicesOrError = await this.listCustomerInvoices.execute(criteria); + const customerInvoicesOrError = await this.listCustomerInvoices.execute(criteria); - if (customerCustomerInvoicesOrError.isFailure) { - return this.handleError(customerCustomerInvoicesOrError.error); + if (customerInvoicesOrError.isFailure) { + return this.handleError(customerInvoicesOrError.error); } - return this.ok(this.presenter.toDTO(customerCustomerInvoicesOrError.data, criteria)); + return this.ok(this.presenter.toDTO(customerInvoicesOrError.data, criteria)); } private handleError(error: Error) { diff --git a/modules/customer-invoices/src/api/presentation/list-invoices/presenter/index.ts b/modules/customer-invoices/src/api/presentation/list-invoices/presenter/index.ts index 3db39470..9ecb5c89 100644 --- a/modules/customer-invoices/src/api/presentation/list-invoices/presenter/index.ts +++ b/modules/customer-invoices/src/api/presentation/list-invoices/presenter/index.ts @@ -1 +1 @@ -export * from "./list-customer-invoices.presenter"; +export * from "./list-invoices.presenter"; diff --git a/modules/customer-invoices/src/api/presentation/list-invoices/presenter/list-invoices.presenter.ts b/modules/customer-invoices/src/api/presentation/list-invoices/presenter/list-invoices.presenter.ts index cd1ddebc..b83cf2f9 100644 --- a/modules/customer-invoices/src/api/presentation/list-invoices/presenter/list-invoices.presenter.ts +++ b/modules/customer-invoices/src/api/presentation/list-invoices/presenter/list-invoices.presenter.ts @@ -1,4 +1,4 @@ -import { IListResponseDTO } from "@erp/core/api"; +import { IListResponseDTO } from "@erp/core"; import { Criteria } from "@repo/rdx-criteria/server"; import { Collection } from "@repo/rdx-utils"; import { IListCustomerInvoicesResponseDTO } from "../../../../common/dto"; @@ -6,37 +6,35 @@ import { CustomerInvoice } from "../../../domain"; export interface IListCustomerInvoicesPresenter { toDTO: ( - customerCustomerInvoices: Collection, + customerInvoices: Collection, criteria: Criteria ) => IListResponseDTO; } export const listCustomerInvoicesPresenter: IListCustomerInvoicesPresenter = { toDTO: ( - customerCustomerInvoices: Collection, + customerInvoices: Collection, criteria: Criteria ): IListResponseDTO => { - const items = customerInvoices.map((customerCustomerInvoice) => { + const items = customerInvoices.map((invoice) => { return { - id: customerCustomerInvoice.id.toPrimitive(), + id: invoice.id.toPrimitive(), - customerCustomerInvoice_status: customerCustomerInvoice.status.toString(), - customerCustomerInvoice_number: - customerCustomerInvoice.customerCustomerInvoiceNumber.toString(), - customerCustomerInvoice_series: - customerCustomerInvoice.customerCustomerInvoiceSeries.toString(), - issue_date: customerCustomerInvoice.issueDate.toISOString(), - operation_date: customerCustomerInvoice.operationDate.toISOString(), + invoice_status: invoice.status.toString(), + invoice_number: invoice.customerInvoiceNumber.toString(), + invoice_series: invoice.customerInvoiceSeries.toString(), + issue_date: invoice.issueDate.toISOString(), + operation_date: invoice.operationDate.toISOString(), language_code: "ES", - currency: customerCustomerInvoice.customerCustomerInvoiceCurrency.toString(), - subtotal: customerCustomerInvoice.calculateSubtotal().toPrimitive(), - total: customerCustomerInvoice.calculateTotal().toPrimitive(), + currency: invoice.customerInvoiceCurrency.toString(), + subtotal: invoice.calculateSubtotal().toPrimitive(), + total: invoice.calculateTotal().toPrimitive(), - //recipient: CustomerInvoiceParticipantPresenter(customerCustomerInvoice.recipient), + //recipient: CustomerInvoiceParticipantPresenter(customerInvoice.recipient), metadata: { - entity: "customerCustomerInvoice", + entity: "customer-invoice", }, } as IListCustomerInvoicesResponseDTO; }); diff --git a/modules/customer-invoices/src/api/presentation/update-invoice/presenter/InvoiceItem.presenter.ts.bak b/modules/customer-invoices/src/api/presentation/update-invoice/presenter/InvoiceItem.presenter.ts.bak index a47be083..d082b387 100644 --- a/modules/customer-invoices/src/api/presentation/update-invoice/presenter/InvoiceItem.presenter.ts.bak +++ b/modules/customer-invoices/src/api/presentation/update-invoice/presenter/InvoiceItem.presenter.ts.bak @@ -2,7 +2,7 @@ import { CustomerInvoiceItem } from "@/contexts/invoicing/domain/CustomerInvoice import { IInvoicingContext } from "@/contexts/invoicing/intrastructure/InvoicingContext"; import { ICollection, IMoney_Response_DTO } from "@shared/contexts"; -export const customerCustomerInvoiceItemPresenter = ( +export const customerInvoiceItemPresenter = ( items: ICollection, context: IInvoicingContext ) => diff --git a/modules/customer-invoices/src/api/presentation/update-invoice/presenter/UpdateInvoice.presenter.ts.bak b/modules/customer-invoices/src/api/presentation/update-invoice/presenter/UpdateInvoice.presenter.ts.bak index 59c5ad4c..eb3086ce 100644 --- a/modules/customer-invoices/src/api/presentation/update-invoice/presenter/UpdateInvoice.presenter.ts.bak +++ b/modules/customer-invoices/src/api/presentation/update-invoice/presenter/UpdateInvoice.presenter.ts.bak @@ -1,33 +1,33 @@ import { CustomerInvoice } from "@/contexts/invoicing/domain"; import { IInvoicingContext } from "@/contexts/invoicing/intrastructure/InvoicingContext"; import { IUpdateCustomerInvoice_Response_DTO } from "@shared/contexts"; -import { customerCustomerInvoiceItemPresenter } from "./CustomerInvoiceItem.presenter"; +import { customerInvoiceItemPresenter } from "./CustomerInvoiceItem.presenter"; import { CustomerInvoiceParticipantPresenter } from "./CustomerInvoiceParticipant.presenter"; export interface IUpdateCustomerInvoicePresenter { - map: (customerCustomerInvoice: CustomerInvoice, context: IInvoicingContext) => IUpdateCustomerInvoice_Response_DTO; + map: (customerInvoice: CustomerInvoice, context: IInvoicingContext) => IUpdateCustomerInvoice_Response_DTO; } export const updateCustomerInvoicePresenter: IUpdateCustomerInvoicePresenter = { - map: (customerCustomerInvoice: CustomerInvoice, context: IInvoicingContext): IUpdateCustomerInvoice_Response_DTO => { + map: (customerInvoice: CustomerInvoice, context: IInvoicingContext): IUpdateCustomerInvoice_Response_DTO => { return { - id: customerCustomerInvoice.id.toString(), + id: customerInvoice.id.toString(), - customerCustomerInvoice_status: customerCustomerInvoice.status.toString(), - customerCustomerInvoice_number: customerCustomerInvoice.customerCustomerInvoiceNumber.toString(), - customerCustomerInvoice_series: customerCustomerInvoice.customerCustomerInvoiceSeries.toString(), - issue_date: customerCustomerInvoice.issueDate.toISO8601(), - operation_date: customerCustomerInvoice.operationDate.toISO8601(), - language_code: customerCustomerInvoice.language.toString(), - currency: customerCustomerInvoice.currency.toString(), - subtotal: customerCustomerInvoice.calculateSubtotal().toPrimitive(), - total: customerCustomerInvoice.calculateTotal().toPrimitive(), + customerInvoice_status: customerInvoice.status.toString(), + customerInvoice_number: customerInvoice.customerInvoiceNumber.toString(), + customerInvoice_series: customerInvoice.customerInvoiceSeries.toString(), + issue_date: customerInvoice.issueDate.toISO8601(), + operation_date: customerInvoice.operationDate.toISO8601(), + language_code: customerInvoice.language.toString(), + currency: customerInvoice.currency.toString(), + subtotal: customerInvoice.calculateSubtotal().toPrimitive(), + total: customerInvoice.calculateTotal().toPrimitive(), - //sender: {}, //await CustomerInvoiceParticipantPresenter(customerCustomerInvoice.senderId, context), + //sender: {}, //await CustomerInvoiceParticipantPresenter(customerInvoice.senderId, context), - recipient: CustomerInvoiceParticipantPresenter(customerCustomerInvoice.recipient, context), + recipient: CustomerInvoiceParticipantPresenter(customerInvoice.recipient, context), - items: customerCustomerInvoiceItemPresenter(customerCustomerInvoice.items, context), + items: customerInvoiceItemPresenter(customerInvoice.items, context), }; }, }; diff --git a/modules/customer-invoices/src/api/presentation/update-invoice/update-invoice.controller.ts.bak b/modules/customer-invoices/src/api/presentation/update-invoice/update-invoice.controller.ts.bak index 80e994fa..c65e80c9 100644 --- a/modules/customer-invoices/src/api/presentation/update-invoice/update-invoice.controller.ts.bak +++ b/modules/customer-invoices/src/api/presentation/update-invoice/update-invoice.controller.ts.bak @@ -23,16 +23,16 @@ export class UpdateCustomerInvoiceController extends ExpressController { } async executeImpl(): Promise { - const { customerCustomerInvoiceId } = this.req.params; + const { customerInvoiceId } = this.req.params; const request: IUpdateCustomerInvoice_DTO = this.req.body; - if (RuleValidator.validate(RuleValidator.RULE_NOT_NULL_OR_UNDEFINED, customerCustomerInvoiceId).isFailure) { + if (RuleValidator.validate(RuleValidator.RULE_NOT_NULL_OR_UNDEFINED, customerInvoiceId).isFailure) { return this.invalidInputError("CustomerInvoice Id param is required!"); } - const idOrError = UniqueID.create(customerCustomerInvoiceId); + const idOrError = UniqueID.create(customerInvoiceId); if (idOrError.isFailure) { - return this.invalidInputError("Invalid customerCustomerInvoice Id param!"); + return this.invalidInputError("Invalid customerInvoice Id param!"); } try { @@ -62,9 +62,9 @@ export class UpdateCustomerInvoiceController extends ExpressController { } } - const customerCustomerInvoice = result.object; + const customerInvoice = result.object; - return this.ok(this.presenter.map(customerCustomerInvoice, this.context)); + return this.ok(this.presenter.map(customerInvoice, this.context)); } catch (e: unknown) { return this.fail(e as IServerError); } diff --git a/modules/customer-invoices/src/common/dto/customer-invoices.request.dto.ts b/modules/customer-invoices/src/common/dto/customer-invoices.request.dto.ts index 0d7adb4b..130fb36e 100644 --- a/modules/customer-invoices/src/common/dto/customer-invoices.request.dto.ts +++ b/modules/customer-invoices/src/common/dto/customer-invoices.request.dto.ts @@ -1,10 +1,10 @@ -export type IListCustomerInvoicesRequestDTO = {} +export type IListCustomerInvoicesRequestDTO = {}; export interface ICreateCustomerInvoiceRequestDTO { id: string; - customerCustomerInvoice_number: string; - customerCustomerInvoice_series: string; + customerInvoice_number: string; + customerInvoice_series: string; issue_date: string; operation_date: string; language_code: string; diff --git a/modules/customer-invoices/src/common/dto/customer-invoices.response.dto.ts b/modules/customer-invoices/src/common/dto/customer-invoices.response.dto.ts index 79667072..f3c58d73 100644 --- a/modules/customer-invoices/src/common/dto/customer-invoices.response.dto.ts +++ b/modules/customer-invoices/src/common/dto/customer-invoices.response.dto.ts @@ -3,9 +3,9 @@ import { IMetadataDTO, IMoneyDTO, IQuantityDTO } from "@erp/core"; export interface IListCustomerInvoicesResponseDTO { id: string; - customerCustomerInvoice_status: string; - customerCustomerInvoice_number: string; - customerCustomerInvoice_series: string; + invoice_status: string; + invoice_number: string; + invoice_series: string; issue_date: string; operation_date: string; language_code: string; @@ -20,9 +20,9 @@ export interface IListCustomerInvoicesResponseDTO { export interface IGetCustomerInvoiceResponseDTO { id: string; - customerCustomerInvoice_status: string; - customerCustomerInvoice_number: string; - customerCustomerInvoice_series: string; + invoice_status: string; + invoice_number: string; + invoice_series: string; issue_date: string; operation_date: string; language_code: string; @@ -49,9 +49,9 @@ export interface IGetCustomerInvoiceResponseDTO { export interface ICreateCustomerInvoiceResponseDTO { id: string; - customerCustomerInvoice_status: string; - customerCustomerInvoice_number: string; - customerCustomerInvoice_series: string; + invoice_status: string; + invoice_number: string; + invoice_series: string; issue_date: string; operation_date: string; language_code: string; @@ -67,9 +67,9 @@ export interface ICreateCustomerInvoiceResponseDTO { export interface IUpdateCustomerInvoiceResponseDTO { id: string; - customerCustomerInvoice_status: string; - customerCustomerInvoice_number: string; - customerCustomerInvoice_series: string; + invoice_status: string; + invoice_number: string; + invoice_series: string; issue_date: string; operation_date: string; language_code: string; diff --git a/modules/customer-invoices/src/common/dto/customer-invoices.schemas.ts b/modules/customer-invoices/src/common/dto/customer-invoices.schemas.ts index cf59efa5..7c2c6e4f 100644 --- a/modules/customer-invoices/src/common/dto/customer-invoices.schemas.ts +++ b/modules/customer-invoices/src/common/dto/customer-invoices.schemas.ts @@ -2,8 +2,8 @@ import { z } from "zod"; export const ICreateCustomerInvoiceRequestSchema = z.object({ id: z.string().uuid(), - customerCustomerInvoice_number: z.string().min(1), - customerCustomerInvoice_series: z.string().min(1), + customerInvoice_number: z.string().min(1), + customerInvoice_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; diff --git a/modules/customer-invoices/src/web/context/customer-invoices-context.tsx b/modules/customer-invoices/src/web/context/customer-invoices-context.tsx index 3412d511..b059ee8e 100644 --- a/modules/customer-invoices/src/web/context/customer-invoices-context.tsx +++ b/modules/customer-invoices/src/web/context/customer-invoices-context.tsx @@ -1,4 +1,4 @@ -import { CustomerInvoiceService } from "@erp/customerCustomerInvoices/api/domain/services/customer-invoice.service"; +import { CustomerInvoiceService } from "@erp/customerInvoices/api/domain/services/customer-invoice.service"; import { PropsWithChildren, createContext } from "react"; /** diff --git a/modules/customer-invoices/src/web/hooks/use-customer-invoices.bak b/modules/customer-invoices/src/web/hooks/use-customer-invoices.bak index 7e9b7f17..53a06278 100644 --- a/modules/customer-invoices/src/web/hooks/use-customer-invoices.bak +++ b/modules/customer-invoices/src/web/hooks/use-customer-invoices.bak @@ -1,5 +1,5 @@ import { useDataSource, useQueryKey } from "@erp/core/client"; -import { IListCustomerInvoicesResponseDTO } from "@erp/customerCustomerInvoices/common/dto"; +import { IListCustomerInvoicesResponseDTO } from "@erp/customerInvoices/common/dto"; export type UseCustomerInvoicesListParams = Omit & { status?: string; @@ -42,10 +42,10 @@ export const useCustomerInvoices = () => { } = params; return useList({ - queryKey: keys().data().resource("customerCustomerInvoices").action("list").params(params).get(), + queryKey: keys().data().resource("customerInvoices").action("list").params(params).get(), queryFn: () => { return dataSource.getList({ - resource: "customerCustomerInvoices", + resource: "customerInvoices", quickSearchTerm, filters: status !== "all" diff --git a/modules/customer-invoices/tsconfig.json b/modules/customer-invoices/tsconfig.json index e234e4bf..4c9e0112 100644 --- a/modules/customer-invoices/tsconfig.json +++ b/modules/customer-invoices/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "baseUrl": ".", "paths": { - "@erp/customerCustomerInvoices/*": ["./src/*"] + "@erp/customer-invoices/*": ["./src/*"] }, "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 130b0d8c..cf29c3d1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,6 +62,9 @@ importers: express: specifier: ^4.18.2 version: 4.21.2 + express-list-routes: + specifier: ^1.3.1 + version: 1.3.1 helmet: specifier: ^8.0.0 version: 8.1.0 @@ -3613,6 +3616,9 @@ packages: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + express-list-routes@1.3.1: + resolution: {integrity: sha512-HC8gpFjmeoJv1f2vJVBJHThA9XXVSOzIQd0I6WvB9G/E7Yy6f8AnFkam7GJRz/+JJQG3fX49eXWhVqjdNj32dw==} + express@4.21.2: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} @@ -8995,6 +9001,8 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 + express-list-routes@1.3.1: {} + express@4.21.2: dependencies: accepts: 1.3.8