import { type ModuleParams, buildCatalogs, buildTransactionManager } from "@erp/core/api"; import { type CreateSupplierUseCase, type GetSupplierByIdUseCase, type ListSuppliersUseCase, buildCreateSupplierUseCase, buildGetSupplierByIdUseCase, buildListSuppliersUseCase, buildSupplierCreator, buildSupplierFinder, buildSupplierInputMappers, buildSupplierSnapshotBuilders, buildSupplierUpdater, } from "../../application"; import { buildSupplierPersistenceMappers } from "./supplier-persistence-mappers.di"; import { buildSupplierRepository } from "./supplier-repositories.di"; export type SuppliersInternalDeps = { useCases: { listSuppliers: () => ListSuppliersUseCase; getSupplierById: () => GetSupplierByIdUseCase; createSupplier: () => CreateSupplierUseCase; //updateSupplier: () => UpdateSupplierUseCase; /* deleteSupplier: () => DeleteSupplierUseCase; changeStatusSupplier: () => ChangeStatusSupplierUseCase;*/ }; }; export function buildSuppliersDependencies(params: ModuleParams): SuppliersInternalDeps { const { database } = params; // Infrastructure const transactionManager = buildTransactionManager(database); const catalogs = buildCatalogs(); const persistenceMappers = buildSupplierPersistenceMappers(catalogs); const repository = buildSupplierRepository({ database, mappers: persistenceMappers }); //const numberService = buildSupplierNumberGenerator(); // Application helpers const inputMappers = buildSupplierInputMappers(catalogs); const finder = buildSupplierFinder({ repository }); const creator = buildSupplierCreator({ repository }); const updater = buildSupplierUpdater({ repository }); const snapshotBuilders = buildSupplierSnapshotBuilders(); //const documentGeneratorPipeline = buildSupplierDocumentService(params); // Internal use cases (factories) return { useCases: { listSuppliers: () => buildListSuppliersUseCase({ finder, summarySnapshotBuilder: snapshotBuilders.summary, transactionManager, }), getSupplierById: () => buildGetSupplierByIdUseCase({ finder, fullSnapshotBuilder: snapshotBuilders.full, transactionManager, }), createSupplier: () => buildCreateSupplierUseCase({ creator, dtoMapper: inputMappers.createInputMapper, fullSnapshotBuilder: snapshotBuilders.full, transactionManager, }), /*updateSupplier: () => buildUpdateSupplierUseCase({ updater, dtoMapper: inputMappers.updateInputMapper, fullSnapshotBuilder: snapshotBuilders.full, transactionManager, }),*/ }, }; }