import { type ModuleParams, buildCatalogs, buildTransactionManager } from "@erp/core/api"; import { type GetCustomerByIdUseCase, type ListCustomersUseCase, buildCustomerFinder, buildCustomerSnapshotBuilders, buildGetCustomerByIdUseCase, buildListCustomersUseCase, } from "../../application"; import { buildCustomerPersistenceMappers } from "./customer-persistence-mappers.di"; import { buildCustomerRepository } from "./customer-repositories.di"; export type CustomersInternalDeps = { useCases: { listCustomers: () => ListCustomersUseCase; getCustomerById: () => GetCustomerByIdUseCase; //reportCustomer: () => ReportCustomerUseCase; //createCustomer: () => CreateCustomerUseCase; /* updateCustomer: () => UpdateCustomerUseCase; deleteCustomer: () => DeleteCustomerUseCase; issueCustomer: () => IssueCustomerUseCase; changeStatusCustomer: () => ChangeStatusCustomerUseCase;*/ }; }; export function buildCustomersDependencies(params: ModuleParams): CustomersInternalDeps { const { database } = params; // Infrastructure const transactionManager = buildTransactionManager(database); const catalogs = buildCatalogs(); const persistenceMappers = buildCustomerPersistenceMappers(); const repository = buildCustomerRepository({ database, mappers: persistenceMappers }); //const numberService = buildCustomerNumberGenerator(); // Application helpers //const inputMappers = buildCustomerInputMappers(catalogs); const finder = buildCustomerFinder(repository); //const creator = buildCustomerCreator({ numberService, repository }); const snapshotBuilders = buildCustomerSnapshotBuilders(); //const documentGeneratorPipeline = buildCustomerDocumentService(params); // Internal use cases (factories) return { useCases: { listCustomers: () => buildListCustomersUseCase({ finder, summarySnapshotBuilder: snapshotBuilders.summary, transactionManager, }), getCustomerById: () => buildGetCustomerByIdUseCase({ finder, fullSnapshotBuilder: snapshotBuilders.full, transactionManager, }), /*reportCustomer: () => buildReportCustomerUseCase({ finder, fullSnapshotBuilder: snapshotBuilders.full, reportSnapshotBuilder: snapshotBuilders.report, documentService: documentGeneratorPipeline, transactionManager, }), createCustomer: () => buildCreateCustomerUseCase({ creator, dtoMapper: inputMappers.createInputMapper, fullSnapshotBuilder: snapshotBuilders.full, transactionManager, }),*/ }, }; }