whereKey($catalogItem->getKey()) ->lockForUpdate() ->firstOrFail(); $limit = $catalogItem->max_units_per_user; if ($limit === null) { return; } $purchasedQuantity = (int) PurchaseItem::query() ->where('source_catalog_item_id', $catalogItem->getKey()) ->whereHas('purchase', function ($query) use ($userId, $excludedPurchaseId): void { $query ->where('user_id', $userId) ->whereIn('status', [ Purchase::STATUS_CREATED, Purchase::STATUS_PENDING_PAYMENT, Purchase::STATUS_PAID, ]) ->when( $excludedPurchaseId !== null, fn ($query) => $query->whereKeyNot($excludedPurchaseId), ); }) ->sum('cantidad'); if ($purchasedQuantity + $requestedQuantity > $limit) { throw ValidationException::withMessages([ $field => __('api.purchase_limit.exceeded', ['max' => $limit]), ]); } }); } }