Uecko_ERP/modules/customer-invoices/src/api/infrastructure/di/issued-invoices.di.ts

67 lines
2.0 KiB
TypeScript

// modules/invoice/infrastructure/invoice-dependencies.factory.ts
import { type ModuleParams, buildTransactionManager } from "@erp/core/api";
import {
type GetIssuedInvoiceByIdUseCase,
type ListIssuedInvoicesUseCase,
type ReportIssuedInvoiceUseCase,
buildGetIssuedInvoiceByIdUseCase,
buildIssuedInvoiceFinder,
buildIssuedInvoiceSnapshotBuilders,
buildListIssuedInvoicesUseCase,
buildReportIssuedInvoiceUseCase,
} from "../../application/issued-invoices";
import { buildIssuedInvoiceDocumentService } from "./documents.di";
import { buildRepository } from "./repositories.di";
export type IssuedInvoicesInternalDeps = {
useCases: {
listIssuedInvoices: () => ListIssuedInvoicesUseCase;
getIssuedInvoiceById: () => GetIssuedInvoiceByIdUseCase;
reportIssuedInvoice: () => ReportIssuedInvoiceUseCase;
};
};
export function buildIssuedInvoicesDependencies(params: ModuleParams): IssuedInvoicesInternalDeps {
const { database, env } = params;
// Infrastructure
const transactionManager = buildTransactionManager(database);
const repository = buildRepository(database);
// Application helpers
const finder = buildIssuedInvoiceFinder(repository);
const snapshotBuilders = buildIssuedInvoiceSnapshotBuilders();
const documentGeneratorPipeline = buildIssuedInvoiceDocumentService(env);
// Internal use cases (factories)
return {
useCases: {
listIssuedInvoices: () =>
buildListIssuedInvoicesUseCase({
finder,
itemSnapshotBuilder: snapshotBuilders.list,
transactionManager,
}),
getIssuedInvoiceById: () =>
buildGetIssuedInvoiceByIdUseCase({
finder,
fullSnapshotBuilder: snapshotBuilders.full,
transactionManager,
}),
reportIssuedInvoice: () =>
buildReportIssuedInvoiceUseCase({
finder,
fullSnapshotBuilder: snapshotBuilders.full,
reportSnapshotBuilder: snapshotBuilders.report,
documentService: documentGeneratorPipeline,
transactionManager,
}),
},
};
}