FactuGES_ERP/modules/supplier/src/api/infrastructure/di/suppliers.di.ts
2026-03-30 13:57:42 +02:00

89 lines
2.7 KiB
TypeScript

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