Uecko_ERP/modules/customer-invoices/src/api/infrastructure/dependencies.ts

85 lines
3.1 KiB
TypeScript
Raw Normal View History

import type { ModuleParams } from "@erp/core/api";
import { SequelizeTransactionManager } from "@erp/core/api";
import {
CreateCustomerInvoiceUseCase,
CreateCustomerInvoicesAssembler,
DeleteCustomerInvoiceUseCase,
2025-09-03 18:04:09 +00:00
GetCustomerInvoiceItemsAssembler,
GetCustomerInvoiceUseCase,
ListCustomerInvoicesAssembler,
ListCustomerInvoicesUseCase,
2025-09-03 10:41:12 +00:00
UpdateCustomerInvoiceAssembler,
UpdateCustomerInvoiceUseCase,
} from "../application";
2025-08-26 18:55:59 +00:00
import { CustomerInvoiceService, ICustomerInvoiceService } from "../domain";
import { CustomerInvoiceMapper } from "./mappers";
import { CustomerInvoiceRepository } from "./sequelize";
type InvoiceDeps = {
transactionManager: SequelizeTransactionManager;
repo: CustomerInvoiceRepository;
mapper: CustomerInvoiceMapper;
2025-08-26 18:55:59 +00:00
service: ICustomerInvoiceService;
assemblers: {
list: ListCustomerInvoicesAssembler;
2025-09-03 18:04:09 +00:00
get: GetCustomerInvoiceItemsAssembler;
create: CreateCustomerInvoicesAssembler;
2025-09-03 10:41:12 +00:00
update: UpdateCustomerInvoiceAssembler;
};
build: {
list: () => ListCustomerInvoicesUseCase;
get: () => GetCustomerInvoiceUseCase;
create: () => CreateCustomerInvoiceUseCase;
2025-09-03 10:41:12 +00:00
update: () => UpdateCustomerInvoiceUseCase;
delete: () => DeleteCustomerInvoiceUseCase;
};
presenters: {
// list: <T>(res: Response) => ListPresenter<T>;
};
};
let _repo: CustomerInvoiceRepository | null = null;
let _mapper: CustomerInvoiceMapper | null = null;
2025-08-26 18:55:59 +00:00
let _service: ICustomerInvoiceService | null = null;
let _assemblers: InvoiceDeps["assemblers"] | null = null;
export function getInvoiceDependencies(params: ModuleParams): InvoiceDeps {
const { database } = params;
const transactionManager = new SequelizeTransactionManager(database);
if (!_mapper) _mapper = new CustomerInvoiceMapper();
if (!_repo) _repo = new CustomerInvoiceRepository(_mapper);
if (!_service) _service = new CustomerInvoiceService(_repo);
if (!_assemblers) {
_assemblers = {
list: new ListCustomerInvoicesAssembler(), // transforma domain → ListDTO
2025-09-03 18:04:09 +00:00
get: new GetCustomerInvoiceItemsAssembler(), // transforma domain → DetailDTO
create: new CreateCustomerInvoicesAssembler(), // transforma domain → CreatedDTO
2025-09-03 10:41:12 +00:00
update: new UpdateCustomerInvoiceAssembler(), // transforma domain -> UpdateDTO
};
}
return {
transactionManager,
repo: _repo,
mapper: _mapper,
service: _service,
assemblers: _assemblers,
build: {
list: () =>
new ListCustomerInvoicesUseCase(_service!, transactionManager!, _assemblers!.list),
get: () => new GetCustomerInvoiceUseCase(_service!, transactionManager!, _assemblers!.get),
create: () =>
new CreateCustomerInvoiceUseCase(_service!, transactionManager!, _assemblers!.create),
2025-09-03 10:41:12 +00:00
update: () =>
new UpdateCustomerInvoiceUseCase(_service!, transactionManager!, _assemblers!.update),
delete: () => new DeleteCustomerInvoiceUseCase(_service!, transactionManager!),
},
presenters: {
//list: <T>(res: Response) => createListPresenter<T>(res),
//json: <T>(res: Response, status: number = 200) => createJsonPresenter<T>(res, status),
},
};
}