import type { SetupParams } from "@erp/core/api"; import { buildCatalogs, buildTransactionManager } from "@erp/core/api"; import { buildIssuedInvoiceFinder, buildIssuedInvoiceSnapshotBuilders, } from "../../../application/issued-invoices"; import { buildIssuedInvoiceDocumentService } from "./issued-invoice-documents.di"; import { buildIssuedInvoicePersistenceMappers } from "./issued-invoice-persistence-mappers.di"; import { buildIssuedInvoiceRepository } from "./issued-invoice-repositories.di"; import type { IssuedInvoicesInternalDeps } from "./issued-invoices.di"; export type IssuedInvoicePublicServices = { listIssuedInvoices: (filters: unknown, context: unknown) => null; getIssuedInvoiceById: (id: unknown, context: unknown) => null; generateIssuedInvoiceReport: (id: unknown, options: unknown, context: unknown) => null; }; export function buildIssuedInvoiceServices( params: SetupParams, deps: IssuedInvoicesInternalDeps ): IssuedInvoicePublicServices { const { database } = params; // Infrastructure const transactionManager = buildTransactionManager(database); const catalogs = buildCatalogs(); const persistenceMappers = buildIssuedInvoicePersistenceMappers(catalogs); const repository = buildIssuedInvoiceRepository({ database, mappers: persistenceMappers }); // Application helpers const finder = buildIssuedInvoiceFinder(repository); const snapshotBuilders = buildIssuedInvoiceSnapshotBuilders(); const documentGeneratorPipeline = buildIssuedInvoiceDocumentService(params); return { listIssuedInvoices: (filters, context) => null, //internal.useCases.listIssuedInvoices().execute(filters, context), getIssuedInvoiceById: (id, context) => null, //internal.useCases.getIssuedInvoiceById().execute(id, context), generateIssuedInvoiceReport: (id, options, context) => null, //internal.useCases.reportIssuedInvoice().execute(id, options, context), }; }