2025-08-14 14:58:13 +00:00
|
|
|
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,
|
2025-08-14 14:58:13 +00:00
|
|
|
GetCustomerInvoiceUseCase,
|
|
|
|
|
ListCustomerInvoicesAssembler,
|
|
|
|
|
ListCustomerInvoicesUseCase,
|
2025-09-03 10:41:12 +00:00
|
|
|
UpdateCustomerInvoiceAssembler,
|
|
|
|
|
UpdateCustomerInvoiceUseCase,
|
2025-08-14 14:58:13 +00:00
|
|
|
} from "../application";
|
2025-08-26 18:55:59 +00:00
|
|
|
import { CustomerInvoiceService, ICustomerInvoiceService } from "../domain";
|
2025-08-14 14:58:13 +00:00
|
|
|
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;
|
2025-08-14 14:58:13 +00:00
|
|
|
assemblers: {
|
|
|
|
|
list: ListCustomerInvoicesAssembler;
|
2025-09-03 18:04:09 +00:00
|
|
|
get: GetCustomerInvoiceItemsAssembler;
|
2025-08-14 14:58:13 +00:00
|
|
|
create: CreateCustomerInvoicesAssembler;
|
2025-09-03 10:41:12 +00:00
|
|
|
update: UpdateCustomerInvoiceAssembler;
|
2025-08-14 14:58:13 +00:00
|
|
|
};
|
|
|
|
|
build: {
|
|
|
|
|
list: () => ListCustomerInvoicesUseCase;
|
|
|
|
|
get: () => GetCustomerInvoiceUseCase;
|
|
|
|
|
create: () => CreateCustomerInvoiceUseCase;
|
2025-09-03 10:41:12 +00:00
|
|
|
update: () => UpdateCustomerInvoiceUseCase;
|
2025-08-14 14:58:13 +00:00
|
|
|
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;
|
2025-08-14 14:58:13 +00:00
|
|
|
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
|
2025-08-14 14:58:13 +00:00
|
|
|
create: new CreateCustomerInvoicesAssembler(), // transforma domain → CreatedDTO
|
2025-09-03 10:41:12 +00:00
|
|
|
update: new UpdateCustomerInvoiceAssembler(), // transforma domain -> UpdateDTO
|
2025-08-14 14:58:13 +00:00
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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),
|
2025-08-14 14:58:13 +00:00
|
|
|
delete: () => new DeleteCustomerInvoiceUseCase(_service!, transactionManager!),
|
|
|
|
|
},
|
|
|
|
|
presenters: {
|
|
|
|
|
//list: <T>(res: Response) => createListPresenter<T>(res),
|
|
|
|
|
//json: <T>(res: Response, status: number = 200) => createJsonPresenter<T>(res, status),
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
}
|