import type { IModuleServer } from "@erp/core/api"; import { type IssuedInvoicesInternalDeps, buildIssuedInvoiceServices, buildIssuedInvoicesDependencies, buildProformaServices, buildProformasDependencies, models, } from "./infrastructure"; import { issuedInvoicesRouter } from "./infrastructure/express"; import { proformasRouter } from './infrastructure/express'; export const customerInvoicesAPIModule: IModuleServer = { name: "customer-invoices", version: "1.0.0", dependencies: ["customers"], /** * Fase de SETUP * ---------------- * - Construye el dominio (una sola vez) * - Define qu茅 expone el m贸dulo * - NO conecta infraestructura */ async setup(params) { const { env: ENV, app, database, baseRoutePath: API_BASE_PATH, logger } = params; // 1) Dominio interno const issuedInvoicesInternalDeps = buildIssuedInvoicesDependencies(params); const proformasInternalDeps = buildProformasDependencies(params); // 2) Servicios p煤blicos (Application Services) const issuedInvoicesServices = buildIssuedInvoiceServices(issuedInvoicesInternalDeps); const proformasServices = buildProformaServices(proformasInternalDeps); logger.info("馃殌 CustomerInvoices module dependencies registered", { label: this.name }); return { // Modelos Sequelize del m贸dulo models, // Servicios expuestos a otros m贸dulos services: { issuedInvoices: issuedInvoicesServices, proformas: proformasServices }, // Implementaci贸n privada del m贸dulo internal: { issuedInvoices: issuedInvoicesInternalDeps, proformas: proformasInternalDeps }, }; }, /** * Fase de START * ------------- * - Conecta el m贸dulo al runtime * - Puede usar servicios e internals ya construidos * - NO construye dominio */ async start(params) { const { app, baseRoutePath, logger, getInternal } = params; // Recuperamos el dominio interno del m贸dulo const issuedInvoicesInternalDeps = getInternal( "customer-invoices", "issuedInvoices" ); const proformasInternalDeps = getInternal("customer-invoices", "proformas"); // Registro de rutas HTTP issuedInvoicesRouter(params, issuedInvoicesInternalDeps); proformasRouter(params, proformasInternalDeps); logger.info("馃殌 CustomerInvoices module started", { label: this.name, }); }, /** * Warmup opcional (si lo necesitas en el futuro) * ---------------------------------------------- * warmup(params) { * ... * } */ }; export default customerInvoicesAPIModule;