Uecko_ERP/modules/verifactu/src/api/infrastructure/dependencies.ts

87 lines
2.8 KiB
TypeScript
Raw Normal View History

2025-09-23 17:21:16 +00:00
// modules/invoice/infrastructure/invoice-dependencies.factory.ts
import type { IMapperRegistry, IPresenterRegistry, ModuleParams } from "@erp/core/api";
import {
InMemoryMapperRegistry,
InMemoryPresenterRegistry,
SequelizeTransactionManager,
} from "@erp/core/api";
2025-09-24 17:30:35 +00:00
import { SendInvoiceUseCase } from "../application";
import { VerifactuRecordFullPresenter } from "../application/presenters/domain/verifactu-record.full.presenter";
import { VerifactuRecordService } from "../domain";
//import { VerifactuRecordItemsReportPersenter } from "../application/presenters/queries/verifactu-record-items.report.presenter";
import { VerifactuRecordDomainMapper } from "./mappers";
import { VerifactuRecordRepository } from "./sequelize";
2025-09-23 17:21:16 +00:00
2025-09-24 17:30:35 +00:00
export type VerifactuRecordDeps = {
2025-09-23 17:21:16 +00:00
transactionManager: SequelizeTransactionManager;
mapperRegistry: IMapperRegistry;
presenterRegistry: IPresenterRegistry;
2025-09-24 17:30:35 +00:00
repo: VerifactuRecordRepository;
service: VerifactuRecordService;
2025-09-23 17:21:16 +00:00
build: {
2025-09-24 17:30:35 +00:00
send: () => SendInvoiceUseCase;
2025-09-23 17:21:16 +00:00
};
2025-09-24 17:30:35 +00:00
getService: (name: string) => any;
listServices: () => string[];
2025-09-23 17:21:16 +00:00
};
2025-09-24 17:30:35 +00:00
export function buildVerifactuDependencies(params: ModuleParams): VerifactuRecordDeps {
const { database, listServices, getService } = params;
2025-09-23 17:21:16 +00:00
const transactionManager = new SequelizeTransactionManager(database);
// Mapper Registry
const mapperRegistry = new InMemoryMapperRegistry();
2025-09-24 17:30:35 +00:00
mapperRegistry.registerDomainMapper(
{ resource: "verifactu-record" },
new VerifactuRecordDomainMapper({})
);
/* .registerQueryMappers([
2025-09-23 17:21:16 +00:00
{
2025-09-24 17:30:35 +00:00
key: { resource: "verifactu-record", query: "LIST" },
mapper: new VerifactuRecordListMapper(),
2025-09-23 17:21:16 +00:00
},
]);
2025-09-24 17:30:35 +00:00
*/
2025-09-23 17:21:16 +00:00
// Repository & Services
2025-09-24 17:30:35 +00:00
const repo = new VerifactuRecordRepository({ mapperRegistry, database });
const service = new VerifactuRecordService(repo);
2025-09-23 17:21:16 +00:00
// Presenter Registry
const presenterRegistry = new InMemoryPresenterRegistry();
presenterRegistry.registerPresenters([
{
key: {
2025-09-24 17:30:35 +00:00
resource: "verifactu-record",
2025-09-23 17:21:16 +00:00
projection: "FULL",
},
2025-09-24 17:30:35 +00:00
presenter: new VerifactuRecordFullPresenter(presenterRegistry),
2025-09-23 17:21:16 +00:00
},
]);
return {
transactionManager,
repo,
mapperRegistry,
presenterRegistry,
service,
build: {
2025-09-24 17:30:35 +00:00
send: () => new SendInvoiceUseCase(service, transactionManager, presenterRegistry),
// get: () => new GetVerifactuRecordUseCase(service, transactionManager, presenterRegistry),
/* create: () =>
new CreateVerifactuRecordUseCase(
2025-09-23 17:21:16 +00:00
service,
transactionManager,
presenterRegistry,
),
2025-09-24 17:30:35 +00:00
*/
// update: () => new UpdateVerifactuRecordUseCase(service, transactionManager),
// delete: () => new DeleteVerifactuRecordUseCase(service, transactionManager),
2025-09-23 17:21:16 +00:00
},
2025-09-24 17:30:35 +00:00
listServices,
getService,
2025-09-23 17:21:16 +00:00
};
}