FactuGES_ERP/modules/customer-invoices/src/api/index.ts

94 lines
2.6 KiB
TypeScript
Raw Normal View History

import type { IModuleServer } from "@erp/core/api";
2025-11-11 18:57:04 +00:00
import {
type IssuedInvoicesInternalDeps,
2026-02-22 18:15:22 +00:00
buildIssuedInvoiceServices,
buildIssuedInvoicesDependencies,
buildProformaServices,
2026-02-22 18:15:22 +00:00
buildProformasDependencies,
models,
} from "./infrastructure";
2026-02-17 10:35:07 +00:00
import { issuedInvoicesRouter } from "./infrastructure/express";
2026-02-22 18:15:22 +00:00
import { proformasRouter } from './infrastructure/express';
2025-06-11 15:13:44 +00:00
2025-06-12 06:55:17 +00:00
export const customerInvoicesAPIModule: IModuleServer = {
name: "customer-invoices",
2025-06-11 15:13:44 +00:00
version: "1.0.0",
2025-09-03 10:41:12 +00:00
dependencies: ["customers"],
2025-06-11 15:13:44 +00:00
/**
* 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;
2026-02-07 22:07:23 +00:00
// 1) Dominio interno
const issuedInvoicesInternalDeps = buildIssuedInvoicesDependencies(params);
2026-02-22 18:15:22 +00:00
const proformasInternalDeps = buildProformasDependencies(params);
2026-02-07 22:07:23 +00:00
// 2) Servicios públicos (Application Services)
2026-02-22 18:15:22 +00:00
const issuedInvoicesServices = buildIssuedInvoiceServices(issuedInvoicesInternalDeps);
const proformasServices = buildProformaServices(proformasInternalDeps);
2026-02-07 22:07:23 +00:00
logger.info("🚀 CustomerInvoices module dependencies registered", { label: this.name });
2025-09-24 17:30:35 +00:00
2025-06-11 15:13:44 +00:00
return {
// Modelos Sequelize del módulo
2025-06-11 15:13:44 +00:00
models,
// Servicios expuestos a otros módulos
2025-06-11 15:13:44 +00:00
services: {
2026-02-07 22:07:23 +00:00
issuedInvoices: issuedInvoicesServices,
2026-02-22 18:15:22 +00:00
proformas: proformasServices
},
// Implementación privada del módulo
internal: {
issuedInvoices: issuedInvoicesInternalDeps,
2026-02-22 18:15:22 +00:00
proformas: proformasInternalDeps
2025-06-11 15:13:44 +00:00
},
};
},
/**
* 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<IssuedInvoicesInternalDeps>(
"customer-invoices",
"issuedInvoices"
);
2026-02-22 18:15:22 +00:00
const proformasInternalDeps = getInternal("customer-invoices", "proformas");
// Registro de rutas HTTP
issuedInvoicesRouter(params, issuedInvoicesInternalDeps);
2026-02-22 18:15:22 +00:00
proformasRouter(params, proformasInternalDeps);
logger.info("🚀 CustomerInvoices module started", {
label: this.name,
});
},
/**
* Warmup opcional (si lo necesitas en el futuro)
* ----------------------------------------------
* warmup(params) {
* ...
* }
*/
2025-06-11 15:13:44 +00:00
};
2025-06-12 06:55:17 +00:00
export default customerInvoicesAPIModule;