FactuGES_ERP/modules/companies/src/api/index.ts

79 lines
2.0 KiB
TypeScript
Raw Normal View History

2026-07-06 10:57:33 +00:00
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";
2026-07-06 11:55:06 +00:00
2026-07-06 10:57:33 +00:00
export type CompaniesPublicServicesType = ICompanyPublicServices;
export const companiesAPIModule: IModuleServer = {
name: "companies",
version: "1.0.0",
dependencies: ["identity"],
2026-07-06 11:55:06 +00:00
/**
* Fase de SETUP
* ----------------
* - Construye el dominio (una sola vez)
* - Define qué expone el módulo
* - NO conecta infraestructura
*/
2026-07-06 10:57:33 +00:00
async setup(params) {
2026-07-06 11:55:06 +00:00
const { env: ENV, app, database, baseRoutePath: API_BASE_PATH, logger } = params;
2026-07-06 10:57:33 +00:00
const internal = buildCompaniesDependencies(params);
const companiesServices: ICompanyPublicServices = buildCompaniesPublicServices(
params,
internal
);
logger.info("🚀 Companies module dependencies registered", {
label: this.name,
});
return {
2026-07-06 11:55:06 +00:00
// Modelos Sequelize del módulo
2026-07-06 10:57:33 +00:00
models,
2026-07-06 11:55:06 +00:00
// Servicios expuestos a otros módulos
2026-07-06 10:57:33 +00:00
services: {
2026-07-06 11:55:06 +00:00
general: companiesServices, // 'companies:general'
2026-07-06 10:57:33 +00:00
},
2026-07-06 11:55:06 +00:00
// Implementación privada del módulo
2026-07-06 10:57:33 +00:00
internal,
};
},
2026-07-06 11:55:06 +00:00
/**
* Fase de START
* -------------
* - Conecta el módulo al runtime
* - Puede usar servicios e internals ya construidos
* - NO construye dominio
*/
2026-07-06 10:57:33 +00:00
async start(params) {
2026-07-06 11:55:06 +00:00
const { app, baseRoutePath, logger, getInternal } = params;
// Registro de rutas HTTP
2026-07-06 10:57:33 +00:00
companiesRouter(params);
2026-07-06 11:55:06 +00:00
logger.info("🚀 Companies module started", {
label: this.name,
});
2026-07-06 10:57:33 +00:00
},
2026-07-06 11:55:06 +00:00
/**
* Warmup opcional (si lo necesitas en el futuro)
* ----------------------------------------------
* warmup(params) {
* ...
* }
*/
2026-07-06 10:57:33 +00:00
};
export default companiesAPIModule;