FactuGES_ERP/modules/customers/src/api/infrastructure/di/customers.di.ts
2026-03-07 23:11:39 +01:00

85 lines
2.7 KiB
TypeScript

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,
}),*/
},
};
}