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-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-05 14:49:35 +00:00
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"; <- ???
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-04 16:37:58 +00:00
models : [ . . . paymentMethodModels , . . . paymentTermModels , . . . 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-05 14:49:35 +00:00
paymentMethods : publicServices.paymentMethods ,
2026-05-22 18:24:50 +00:00
paymentTerms : publicServices.paymentTerms ,
2026-06-04 16:37:58 +00:00
taxRegimes : publicServices.taxRegimes ,
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-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 ;