123 lines
3.9 KiB
TypeScript
123 lines
3.9 KiB
TypeScript
import { type ModuleParams, buildTransactionManager } from "@erp/core/api";
|
|
|
|
import {
|
|
type CreateCustomerUseCase,
|
|
type GetCustomerByIdUseCase,
|
|
type ListCustomersUseCase,
|
|
type UpdateCustomerUseCase,
|
|
buildCreateCustomerUseCase,
|
|
buildCustomerCreator,
|
|
buildCustomerFinder,
|
|
buildCustomerInputMappers,
|
|
buildCustomerSnapshotBuilders,
|
|
buildCustomerUpdater,
|
|
buildGetCustomerByIdUseCase,
|
|
buildListCustomersUseCase,
|
|
buildUpdateCustomerUseCase,
|
|
} from "../../application";
|
|
import { buildCustomerReadModelAssemblers } from "../../application/di";
|
|
import { buildCustomerCatalogResolvers } from "../../application/di/customer-catalog-resolvers.di";
|
|
|
|
import { resolveCustomerCatalogsDeps } from "./customer-catalog-deps.di";
|
|
import { buildCustomerPersistenceMappers } from "./customer-persistence-mappers.di";
|
|
import { buildCustomerRepository } from "./customer-repositories.di";
|
|
|
|
export type CustomersInternalDeps = {
|
|
useCases: {
|
|
listCustomers: () => ListCustomersUseCase;
|
|
getCustomerById: () => GetCustomerByIdUseCase;
|
|
createCustomer: () => CreateCustomerUseCase;
|
|
updateCustomer: () => UpdateCustomerUseCase;
|
|
|
|
//reportCustomer: () => ReportCustomerUseCase;
|
|
|
|
/*
|
|
|
|
deleteCustomer: () => DeleteCustomerUseCase;
|
|
issueCustomer: () => IssueCustomerUseCase;
|
|
changeStatusCustomer: () => ChangeStatusCustomerUseCase;*/
|
|
};
|
|
};
|
|
|
|
export function buildCustomersDependencies(params: ModuleParams): CustomersInternalDeps {
|
|
const { database } = params;
|
|
|
|
const catalogs = resolveCustomerCatalogsDeps(params);
|
|
|
|
const transactionManager = buildTransactionManager(database);
|
|
const persistenceMappers = buildCustomerPersistenceMappers();
|
|
|
|
const repository = buildCustomerRepository({ database, mappers: persistenceMappers });
|
|
|
|
const inputMappers = buildCustomerInputMappers();
|
|
const snapshotBuilders = buildCustomerSnapshotBuilders();
|
|
|
|
const catalogResolvers = buildCustomerCatalogResolvers({
|
|
taxDefinitionFinder: catalogs.taxDefinition.finder,
|
|
taxRegimeFinder: catalogs.taxRegime.finder,
|
|
paymentMethodFinder: catalogs.paymentMethod.finder,
|
|
paymentTermFinder: catalogs.paymentTerm.finder,
|
|
});
|
|
|
|
const readModelAssemblers = buildCustomerReadModelAssemblers({
|
|
paymentMethodFinder: catalogs.paymentMethod.finder,
|
|
taxRegimeFinder: catalogs.taxRegime.finder,
|
|
paymentTermFinder: catalogs.paymentTerm.finder,
|
|
});
|
|
|
|
const finder = buildCustomerFinder({ repository });
|
|
const creator = buildCustomerCreator({ repository });
|
|
const updater = buildCustomerUpdater({ repository });
|
|
|
|
//const documentGeneratorPipeline = buildCustomerDocumentService(params);
|
|
|
|
// Internal use cases (factories)
|
|
return {
|
|
useCases: {
|
|
listCustomers: () =>
|
|
buildListCustomersUseCase({
|
|
finder,
|
|
summarySnapshotBuilder: snapshotBuilders.summary,
|
|
transactionManager,
|
|
}),
|
|
|
|
getCustomerById: () =>
|
|
buildGetCustomerByIdUseCase({
|
|
finder,
|
|
fullReadModelAssembler: readModelAssemblers.full,
|
|
fullSnapshotBuilder: snapshotBuilders.full,
|
|
transactionManager,
|
|
}),
|
|
|
|
createCustomer: () =>
|
|
buildCreateCustomerUseCase({
|
|
creator,
|
|
dtoMapper: inputMappers.createInputMapper,
|
|
fullReadModelAssembler: readModelAssemblers.full,
|
|
fullSnapshotBuilder: snapshotBuilders.full,
|
|
transactionManager,
|
|
}),
|
|
|
|
updateCustomer: () =>
|
|
buildUpdateCustomerUseCase({
|
|
updater,
|
|
dtoMapper: inputMappers.updateInputMapper,
|
|
fullReadModelAssembler: readModelAssemblers.full,
|
|
fullSnapshotBuilder: snapshotBuilders.full,
|
|
transactionManager,
|
|
}),
|
|
|
|
/*reportCustomer: () =>
|
|
buildReportCustomerUseCase({
|
|
finder,
|
|
fullSnapshotBuilder: snapshotBuilders.full,
|
|
reportSnapshotBuilder: snapshotBuilders.report,
|
|
documentService: documentGeneratorPipeline,
|
|
transactionManager,
|
|
}),
|
|
|
|
*/
|
|
},
|
|
};
|
|
}
|