84 lines
2.5 KiB
TypeScript
84 lines
2.5 KiB
TypeScript
import { type ModuleParams, buildTransactionManager } from "@erp/core/api";
|
|
|
|
import {
|
|
type CreateSupplierUseCase,
|
|
type GetSupplierByIdUseCase,
|
|
type ListSuppliersUseCase,
|
|
type UpdateSupplierUseCase,
|
|
buildCreateSupplierUseCase,
|
|
buildGetSupplierByIdUseCase,
|
|
buildListSuppliersUseCase,
|
|
buildSupplierUpdater,
|
|
buildUpdateSupplierUseCase,
|
|
buildSupplierCreator,
|
|
buildSupplierFinder,
|
|
buildSupplierInputMappers,
|
|
buildSupplierSnapshotBuilders,
|
|
} 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;
|
|
};
|
|
};
|
|
|
|
export function buildSuppliersDependencies(params: ModuleParams): SuppliersInternalDeps {
|
|
const { database, transactionContext } = params;
|
|
|
|
// Infrastructure
|
|
const transactionManager = buildTransactionManager(database, transactionContext);
|
|
const persistenceMappers = buildSupplierPersistenceMappers();
|
|
|
|
const repository = buildSupplierRepository({ database, mappers: persistenceMappers });
|
|
|
|
// Application helpers
|
|
const inputMappers = buildSupplierInputMappers();
|
|
const finder = buildSupplierFinder({ repository });
|
|
const creator = buildSupplierCreator({ repository });
|
|
const updater = buildSupplierUpdater({ repository });
|
|
|
|
const snapshotBuilders = buildSupplierSnapshotBuilders();
|
|
|
|
// 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({
|
|
finder,
|
|
updater,
|
|
dtoMapper: inputMappers.updateInputMapper,
|
|
fullSnapshotBuilder: snapshotBuilders.full,
|
|
transactionManager,
|
|
}),
|
|
},
|
|
};
|
|
}
|