Хорошо, у меня сейчас такая проблема:
На стороне админки настраивается максимальное количество конкретного товара за заказ. Меняется оно частенько, даже слишком. Нет такого, что существует "некий склад", через который я могу узнать всегда доступное количество. Только единственная табличка в бд, где максимальное количество и настраивается.
У меня есть корзина. Когда пользователь оформляет заказ: я из корзины создаю заказ, при этом мне надо провалидировать, чтобы правило на максимальное количество товара выполнилось для каждой позиции.
Что я делаю сейчас: у меня есть юзкейс. Через репозиторий узнаю количество каждого товара и отдаю в виде dto'шек результат в виде ([product_id: 3, quantity: 6], [product_id:7, quantity: 8]). Этот массив данных обхожу циклом и валидирую его на максимальное количество.
Примерно так происходит:
function TransferCartToOrderUseCase()
{
$productQuantities = $this->cartQuantityRepository->getQuantitiesByProduct($cartId);
foreach ($productQuantities as $productQuantity) {
$allowedQuantity = $this->productsLimitRepository->getAllowedQuantity($productQuantity->productId);
if ($allowedQuantity < $productQuantity->quantity) {
throw new Exception('Not allowed quantity for dish');
}
}
}