FactuGES_ERP/modules/customer-invoices/src/api/index.ts
2026-06-13 14:58:09 +02:00

87 lines
2.3 KiB
TypeScript

import type { IModuleServer } from "@erp/core/api";
import {
buildIssuedInvoicePublicServices,
buildIssuedInvoicesDependencies,
buildProformaPublicServices,
buildProformasDependencies,
issuedInvoicesRouter,
models,
proformasRouter,
} from "./infrastructure";
export type { IProformaPublicServices } from "./application";
export const customerInvoicesAPIModule: IModuleServer = {
name: "customer-invoices",
version: "1.0.0",
dependencies: ["catalogs", "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 issuedInvoicesInternal = buildIssuedInvoicesDependencies(params);
const proformasInternal = buildProformasDependencies(params);
// 2) Servicios públicos (Application Services)
const issuedInvoicesServices = buildIssuedInvoicePublicServices(params, issuedInvoicesInternal);
const proformasServices = buildProformaPublicServices(params, proformasInternal);
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, // 'customer-invoices:issuedInvoices'
proformas: proformasServices, // 'customer-invoices:proformas'
},
// Implementación privada del módulo
internal: {
issuedInvoices: issuedInvoicesInternal,
proformas: proformasInternal,
},
};
},
/**
* 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, getService } = params;
// Registro de rutas HTTP
issuedInvoicesRouter(params);
proformasRouter(params);
logger.info("🚀 CustomerInvoices module started", {
label: this.name,
});
},
/**
* Warmup opcional (si lo necesitas en el futuro)
* ----------------------------------------------
* warmup(params) {
* ...
* }
*/
};
export default customerInvoicesAPIModule;