FactuGES_ERP/modules/customers/src/api/infrastructure/di/customers.di.ts

85 lines
2.7 KiB
TypeScript
Raw Normal View History

2026-03-07 18:27:23 +00:00
import { type ModuleParams, buildCatalogs, buildTransactionManager } from "@erp/core/api";
2026-03-07 21:39:21 +00:00
import {
2026-03-07 22:11:39 +00:00
type GetCustomerByIdUseCase,
2026-03-07 21:39:21 +00:00
type ListCustomersUseCase,
buildCustomerFinder,
buildCustomerSnapshotBuilders,
2026-03-07 22:11:39 +00:00
buildGetCustomerByIdUseCase,
2026-03-07 21:39:21 +00:00
buildListCustomersUseCase,
} from "../../application";
import { buildCustomerPersistenceMappers } from "./customer-persistence-mappers.di";
import { buildCustomerRepository } from "./customer-repositories.di";
2026-03-07 18:27:23 +00:00
export type CustomersInternalDeps = {
useCases: {
listCustomers: () => ListCustomersUseCase;
2026-03-07 22:11:39 +00:00
getCustomerById: () => GetCustomerByIdUseCase;
2026-03-07 21:39:21 +00:00
//reportCustomer: () => ReportCustomerUseCase;
//createCustomer: () => CreateCustomerUseCase;
2026-03-07 18:27:23 +00:00
/*
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();
2026-03-07 21:39:21 +00:00
const persistenceMappers = buildCustomerPersistenceMappers();
2026-03-07 18:27:23 +00:00
const repository = buildCustomerRepository({ database, mappers: persistenceMappers });
2026-03-07 21:39:21 +00:00
//const numberService = buildCustomerNumberGenerator();
2026-03-07 18:27:23 +00:00
// Application helpers
2026-03-07 21:39:21 +00:00
//const inputMappers = buildCustomerInputMappers(catalogs);
2026-03-07 18:27:23 +00:00
const finder = buildCustomerFinder(repository);
2026-03-07 21:39:21 +00:00
//const creator = buildCustomerCreator({ numberService, repository });
2026-03-07 18:27:23 +00:00
2026-03-07 21:39:21 +00:00
const snapshotBuilders = buildCustomerSnapshotBuilders();
//const documentGeneratorPipeline = buildCustomerDocumentService(params);
2026-03-07 18:27:23 +00:00
// Internal use cases (factories)
return {
useCases: {
listCustomers: () =>
buildListCustomersUseCase({
finder,
2026-03-07 21:39:21 +00:00
summarySnapshotBuilder: snapshotBuilders.summary,
2026-03-07 18:27:23 +00:00
transactionManager,
}),
2026-03-07 22:11:39 +00:00
getCustomerById: () =>
2026-03-07 18:27:23 +00:00
buildGetCustomerByIdUseCase({
finder,
fullSnapshotBuilder: snapshotBuilders.full,
transactionManager,
}),
2026-03-07 22:11:39 +00:00
/*reportCustomer: () =>
2026-03-07 18:27:23 +00:00
buildReportCustomerUseCase({
finder,
fullSnapshotBuilder: snapshotBuilders.full,
reportSnapshotBuilder: snapshotBuilders.report,
documentService: documentGeneratorPipeline,
transactionManager,
}),
createCustomer: () =>
buildCreateCustomerUseCase({
creator,
dtoMapper: inputMappers.createInputMapper,
fullSnapshotBuilder: snapshotBuilders.full,
transactionManager,
2026-03-07 21:39:21 +00:00
}),*/
2026-03-07 18:27:23 +00:00
},
};
}