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

67 lines
2.0 KiB
TypeScript
Raw Normal View History

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