67 lines
2.0 KiB
TypeScript
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,
|
|
}),
|
|
},
|
|
};
|
|
}
|