Presupuestador_web/server/src/contexts/sales/application/Quote/DeleteQuote.useCase.ts

56 lines
1.8 KiB
TypeScript
Raw Normal View History

2024-05-21 16:48:40 +00:00
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";
2024-05-26 17:09:43 +00:00
import { IQuoteRepository } from "../../domain";
2024-05-21 16:48:40 +00:00
2024-05-26 17:09:43 +00:00
export interface IDeleteQuoteUseCaseRequest extends IUseCaseRequest {
2024-05-21 16:48:40 +00:00
id: UniqueID;
}
2024-05-26 17:09:43 +00:00
export type DeleteQuoteResponseOrError =
2024-05-21 16:48:40 +00:00
| Result<never, IUseCaseError> // Misc errors (value objects)
| Result<void, never>; // Success!
2024-05-26 17:09:43 +00:00
export class DeleteQuoteUseCase
implements IUseCase<IDeleteQuoteUseCaseRequest, Promise<DeleteQuoteResponseOrError>>
2024-05-21 16:48:40 +00:00
{
private _adapter: ISequelizeAdapter;
private _repositoryManager: IRepositoryManager;
constructor(props: { adapter: ISequelizeAdapter; repositoryManager: IRepositoryManager }) {
this._adapter = props.adapter;
this._repositoryManager = props.repositoryManager;
}
2024-05-26 17:09:43 +00:00
async execute(request: IDeleteQuoteUseCaseRequest): Promise<DeleteQuoteResponseOrError> {
const { id: QuoteId } = request;
2024-05-21 16:48:40 +00:00
const transaction = this._adapter.startTransaction();
2024-05-26 17:09:43 +00:00
const QuoteRepoBuilder = this._getQuoteRepository();
2024-05-21 16:48:40 +00:00
try {
await transaction.complete(async (t) => {
2024-05-26 17:09:43 +00:00
const invoiceRepo = QuoteRepoBuilder({ transaction: t });
await invoiceRepo.removeById(QuoteId);
2024-05-21 16:48:40 +00:00
});
return Result.ok<void>();
} catch (error: unknown) {
//const _error = error as IInfrastructureError;
return Result.fail(
UseCaseError.create(UseCaseError.REPOSITORY_ERROR, "Error al eliminar el usuario")
);
}
}
2024-05-26 17:09:43 +00:00
private _getQuoteRepository() {
return this._repositoryManager.getRepository<IQuoteRepository>("Quote");
}
2024-05-21 16:48:40 +00:00
}