82 lines
2.7 KiB
TypeScript
82 lines
2.7 KiB
TypeScript
import type { ModuleParams } from "@erp/core/api";
|
|
import { SequelizeTransactionManager } from "@erp/core/api";
|
|
|
|
import {
|
|
CreateCustomerUseCase,
|
|
CreateCustomersAssembler,
|
|
DeleteCustomerUseCase,
|
|
GetCustomerAssembler,
|
|
GetCustomerUseCase,
|
|
ListCustomersAssembler,
|
|
ListCustomersUseCase,
|
|
} from "../application";
|
|
import { CustomerService, ICustomerService } from "../domain";
|
|
import { CustomerMapper } from "./mappers";
|
|
import { CustomerRepository } from "./sequelize";
|
|
|
|
type CustomerDeps = {
|
|
transactionManager: SequelizeTransactionManager;
|
|
repo: CustomerRepository;
|
|
mapper: CustomerMapper;
|
|
service: ICustomerService;
|
|
assemblers: {
|
|
list: ListCustomersAssembler;
|
|
get: GetCustomerAssembler;
|
|
create: CreateCustomersAssembler;
|
|
//update: UpdateCustomerAssembler;
|
|
};
|
|
build: {
|
|
list: () => ListCustomersUseCase;
|
|
get: () => GetCustomerUseCase;
|
|
create: () => CreateCustomerUseCase;
|
|
//update: () => UpdateCustomerUseCase;
|
|
delete: () => DeleteCustomerUseCase;
|
|
};
|
|
presenters: {
|
|
// list: <T>(res: Response) => ListPresenter<T>;
|
|
};
|
|
};
|
|
|
|
let _repo: CustomerRepository | null = null;
|
|
let _mapper: CustomerMapper | null = null;
|
|
let _service: ICustomerService | null = null;
|
|
let _assemblers: CustomerDeps["assemblers"] | null = null;
|
|
|
|
export function getCustomerDependencies(params: ModuleParams): CustomerDeps {
|
|
const { database } = params;
|
|
const transactionManager = new SequelizeTransactionManager(database);
|
|
|
|
if (!_mapper) _mapper = new CustomerMapper();
|
|
if (!_repo) _repo = new CustomerRepository(_mapper);
|
|
if (!_service) _service = new CustomerService(_repo);
|
|
|
|
if (!_assemblers) {
|
|
_assemblers = {
|
|
list: new ListCustomersAssembler(), // transforma domain → ListDTO
|
|
get: new GetCustomerAssembler(), // transforma domain → DetailDTO
|
|
create: new CreateCustomersAssembler(), // transforma domain → CreatedDTO
|
|
//update: new UpdateCustomerAssembler(), // transforma domain -> UpdateDTO
|
|
};
|
|
}
|
|
|
|
return {
|
|
transactionManager,
|
|
repo: _repo,
|
|
mapper: _mapper,
|
|
service: _service,
|
|
assemblers: _assemblers,
|
|
build: {
|
|
list: () => new ListCustomersUseCase(_service!, transactionManager!, _assemblers!.list),
|
|
get: () => new GetCustomerUseCase(_service!, transactionManager!, _assemblers!.get),
|
|
create: () => new CreateCustomerUseCase(_service!, transactionManager!, _assemblers!.create),
|
|
/*update: () =>
|
|
new UpdateCustomerUseCase(_service!, transactionManager!, _assemblers!.update),*/
|
|
delete: () => new DeleteCustomerUseCase(_service!, transactionManager!),
|
|
},
|
|
presenters: {
|
|
//list: <T>(res: Response) => createListPresenter<T>(res),
|
|
//json: <T>(res: Response, status: number = 200) => createJsonPresenter<T>(res, status),
|
|
},
|
|
};
|
|
}
|