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

84 lines
2.5 KiB
TypeScript
Raw Normal View History

2026-08-24 14:24:58 +00:00
import { type ModuleParams, buildTransactionManager } from "@erp/core/api";
2026-03-30 11:57:42 +00:00
import {
type CreateSupplierUseCase,
type GetSupplierByIdUseCase,
type ListSuppliersUseCase,
2026-08-24 14:24:58 +00:00
type UpdateSupplierUseCase,
2026-03-30 11:57:42 +00:00
buildCreateSupplierUseCase,
buildGetSupplierByIdUseCase,
buildListSuppliersUseCase,
2026-08-24 14:24:58 +00:00
buildSupplierUpdater,
buildUpdateSupplierUseCase,
2026-03-30 11:57:42 +00:00
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;
2026-08-24 14:24:58 +00:00
updateSupplier: () => UpdateSupplierUseCase;
2026-03-30 11:57:42 +00:00
};
};
export function buildSuppliersDependencies(params: ModuleParams): SuppliersInternalDeps {
2026-08-24 21:43:00 +00:00
const { database, transactionContext } = params;
2026-03-30 11:57:42 +00:00
// Infrastructure
2026-08-24 21:43:00 +00:00
const transactionManager = buildTransactionManager(database, transactionContext);
2026-08-24 14:24:58 +00:00
const persistenceMappers = buildSupplierPersistenceMappers();
2026-03-30 11:57:42 +00:00
const repository = buildSupplierRepository({ database, mappers: persistenceMappers });
// Application helpers
2026-08-24 14:24:58 +00:00
const inputMappers = buildSupplierInputMappers();
2026-03-30 11:57:42 +00:00
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,
}),
2026-08-24 14:24:58 +00:00
updateSupplier: () =>
2026-03-30 11:57:42 +00:00
buildUpdateSupplierUseCase({
2026-08-24 14:24:58 +00:00
finder,
2026-03-30 11:57:42 +00:00
updater,
dtoMapper: inputMappers.updateInputMapper,
fullSnapshotBuilder: snapshotBuilders.full,
transactionManager,
2026-08-24 14:24:58 +00:00
}),
2026-03-30 11:57:42 +00:00
},
};
}