import { IUseCase, IUseCaseError, IUseCaseRequest, UseCaseError, } from "@/contexts/common/application/useCases"; import { IRepositoryManager } from "@/contexts/common/domain"; import { ISequelizeAdapter } from "@/contexts/common/infrastructure/sequelize"; import { Result, UniqueID } from "@shared/contexts"; import { IDealerRepository } from "../domain"; export interface IDeleteDealerUseCaseRequest extends IUseCaseRequest { id: UniqueID; } export type DeleteDealerResponseOrError = | Result // Misc errors (value objects) | Result; // Success! export class DeleteDealerUseCase implements IUseCase> { private _adapter: ISequelizeAdapter; private _repositoryManager: IRepositoryManager; constructor(props: { adapter: ISequelizeAdapter; repositoryManager: IRepositoryManager }) { this._adapter = props.adapter; this._repositoryManager = props.repositoryManager; } private getRepositoryByName(name: string) { return this._repositoryManager.getRepository(name); } async execute(request: IDeleteDealerUseCaseRequest): Promise { const { id: dealerId } = request; const transaction = this._adapter.startTransaction(); const dealerRepoBuilder = this.getRepositoryByName("Dealer"); try { await transaction.complete(async (t) => { const invoiceRepo = dealerRepoBuilder({ transaction: t }); await invoiceRepo.removeById(dealerId); }); return Result.ok(); } catch (error: unknown) { //const _error = error as IInfrastructureError; return Result.fail( UseCaseError.create(UseCaseError.REPOSITORY_ERROR, "Error al eliminar el usuario") ); } } }