import type { IModuleServer } from "@erp/core/api"; import { paymentMethodModels, paymentMethodsRouter, paymentTermModels, paymentTermsRouter, taxRegimeModels, taxRegimesRouter, } from "./infrastructure"; import { buildCatalogsDependencies, buildCatalogsPublicServices, } from "./infrastructure/di/catalogs.di"; export * from "./application/services/catalog-public-services.interface"; // <- exportamos la interfaz de los servicios públicos para que otros módulos puedan usarla en sus dependencias //export * from "./infrastructure/payment-methods/persistence/sequelize"; <- ??? export const catalogsAPIModule: IModuleServer = { name: "catalogs", version: "1.0.0", dependencies: [], /** * 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 internal = buildCatalogsDependencies(params); // 2) Servicios públicos (Application Services) const publicServices = buildCatalogsPublicServices(params, internal); logger.info("🚀 Catalogs module dependencies registered", { label: this.name, }); return { // Modelos Sequelize del módulo models: [...paymentMethodModels, ...paymentTermModels, ...taxRegimeModels], // Servicios expuestos a otros módulos services: { paymentMethods: publicServices.paymentMethods, paymentTerms: publicServices.paymentTerms, taxRegimes: publicServices.taxRegimes, }, // Implementación privada del módulo internal, }; }, /** * Fase de START * ------------- * - Conecta el módulo al runtime * - Puede usar servicios e internals ya construidos * - NO construye dominio */ async start(params) { const { logger } = params; // Registro de rutas HTTP paymentMethodsRouter(params); paymentTermsRouter(params); taxRegimesRouter(params); logger.info("🚀 Catalogs module started", { label: this.name, }); }, /** * Warmup opcional (si lo necesitas en el futuro) * ---------------------------------------------- * warmup(params) { * ... * } */ }; export default catalogsAPIModule;