import { ExpressController } from "@erp/core/api"; import { UniqueID } from "@repo/rdx-ddd"; import { GetCustomerInvoiceUseCase } from "../../application"; import { IGetCustomerInvoicePresenter } from "./presenter"; export class GetCustomerInvoiceController extends ExpressController { public constructor( private readonly getCustomerInvoice: GetCustomerInvoiceUseCase, private readonly presenter: IGetCustomerInvoicePresenter ) { super(); } protected async executeImpl() { const { customerCustomerInvoiceId } = this.req.params; // Validar ID const customerCustomerInvoiceIdOrError = UniqueID.create(customerCustomerInvoiceId); if (customerCustomerInvoiceIdOrError.isFailure) return this.invalidInputError("CustomerInvoice ID not valid"); const customerCustomerInvoiceOrError = await this.getCustomerInvoice.execute(customerCustomerInvoiceIdOrError.data); if (customerCustomerInvoiceOrError.isFailure) { return this.handleError(customerCustomerInvoiceOrError.error); } return this.ok(this.presenter.toDTO(customerCustomerInvoiceOrError.data)); } private handleError(error: Error) { const message = error.message; if ( message.includes("Database connection lost") || message.includes("Database request timed out") ) { return this.unavailableError( "Database service is currently unavailable. Please try again later." ); } return this.conflictError(message); } }