Uecko_ERP/modules/catalogs/src/api/index.ts

101 lines
2.4 KiB
TypeScript
Raw Normal View History

2026-05-20 17:53:23 +00:00
import type { IModuleServer } from "@erp/core/api";
2026-05-22 18:24:50 +00:00
import {
paymentMethodModels,
paymentMethodsRouter,
paymentTermModels,
paymentTermsRouter,
2026-06-13 12:58:09 +00:00
taxDefinitionModels,
taxDefinitionsRouter,
2026-06-04 16:37:58 +00:00
taxRegimeModels,
taxRegimesRouter,
2026-05-22 18:24:50 +00:00
} from "./infrastructure";
2026-05-20 17:53:23 +00:00
import {
buildCatalogsDependencies,
buildCatalogsPublicServices,
2026-05-22 18:24:50 +00:00
} from "./infrastructure/di/catalogs.di";
2026-05-20 17:53:23 +00:00
2026-06-13 12:58:09 +00:00
export * from "./application/payment-methods/public";
export * from "./application/tax-definitions/public";
export * from "./application/tax-regimes/public";
2026-06-05 14:49:35 +00:00
//export * from "./infrastructure/payment-methods/persistence/sequelize"; <- ???
2026-05-20 17:53:23 +00:00
2026-06-13 12:58:09 +00:00
export type CatalogsPublicServicesType = ReturnType<typeof buildCatalogsPublicServices>;
2026-05-20 17:53:23 +00:00
export const catalogsAPIModule: IModuleServer = {
name: "catalogs",
version: "1.0.0",
dependencies: [],
2026-06-05 14:49:35 +00:00
/**
* Fase de SETUP
* ----------------
* - Construye el dominio (una sola vez)
* - Define qué expone el módulo
* - NO conecta infraestructura
*/
2026-05-20 17:53:23 +00:00
async setup(params) {
2026-06-05 14:49:35 +00:00
const { env: ENV, app, database, baseRoutePath: API_BASE_PATH, logger } = params;
// 1) Dominio interno
2026-05-20 17:53:23 +00:00
const internal = buildCatalogsDependencies(params);
2026-06-05 14:49:35 +00:00
// 2) Servicios públicos (Application Services)
2026-05-20 17:53:23 +00:00
const publicServices = buildCatalogsPublicServices(params, internal);
2026-06-05 14:49:35 +00:00
logger.info("🚀 Catalogs module dependencies registered", {
2026-05-20 17:53:23 +00:00
label: this.name,
});
return {
2026-06-05 14:49:35 +00:00
// Modelos Sequelize del módulo
2026-06-13 12:58:09 +00:00
models: [
...paymentMethodModels,
...paymentTermModels,
...taxDefinitionModels,
...taxRegimeModels,
],
2026-06-05 14:49:35 +00:00
// Servicios expuestos a otros módulos
2026-05-20 17:53:23 +00:00
services: {
2026-06-13 12:58:09 +00:00
...publicServices,
2026-05-20 17:53:23 +00:00
},
2026-06-05 14:49:35 +00:00
// Implementación privada del módulo
2026-05-20 17:53:23 +00:00
internal,
};
},
2026-06-05 14:49:35 +00:00
/**
* Fase de START
* -------------
* - Conecta el módulo al runtime
* - Puede usar servicios e internals ya construidos
* - NO construye dominio
*/
2026-05-20 17:53:23 +00:00
async start(params) {
const { logger } = params;
2026-06-05 14:49:35 +00:00
// Registro de rutas HTTP
2026-05-20 17:53:23 +00:00
paymentMethodsRouter(params);
2026-05-22 18:24:50 +00:00
paymentTermsRouter(params);
2026-06-04 16:37:58 +00:00
taxRegimesRouter(params);
2026-06-13 12:58:09 +00:00
taxDefinitionsRouter(params);
2026-05-20 17:53:23 +00:00
logger.info("🚀 Catalogs module started", {
label: this.name,
});
},
2026-06-05 14:49:35 +00:00
/**
* Warmup opcional (si lo necesitas en el futuro)
* ----------------------------------------------
* warmup(params) {
* ...
* }
*/
2026-05-20 17:53:23 +00:00
};
export default catalogsAPIModule;