import type { IModuleServer } from "@erp/core/api"; import type { ICompanyPublicServices } from "./application"; import { companiesRouter, models } from "./infrastructure"; import { buildCompaniesDependencies, buildCompaniesPublicServices } from "./infrastructure/di"; export type { ICompanyPublicServices } from "./application"; export * from "./infrastructure/persistence/sequelize"; export type CompaniesPublicServicesType = ICompanyPublicServices; export const companiesAPIModule: IModuleServer = { name: "companies", version: "1.0.0", dependencies: ["identity"], /** * 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; const internal = buildCompaniesDependencies(params); const companiesServices: ICompanyPublicServices = buildCompaniesPublicServices( params, internal ); logger.info("馃殌 Companies module dependencies registered", { label: this.name, }); return { // Modelos Sequelize del m贸dulo models, // Servicios expuestos a otros m贸dulos services: { general: companiesServices, // 'companies:general' }, // 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 { app, baseRoutePath, logger, getInternal } = params; // Registro de rutas HTTP companiesRouter(params); logger.info("馃殌 Companies module started", { label: this.name, }); }, /** * Warmup opcional (si lo necesitas en el futuro) * ---------------------------------------------- * warmup(params) { * ... * } */ }; export default companiesAPIModule;