В момент резервирования товара проверяется наличие на складе, и если все ок, то резервируем, а есои нет, то оповещаем юзера о том, какие товары не доступны, попутно выкидывая с корзины. Важная штука в этом всем - резервирование
Благодарю за ответы, а если немного по-другому ситуацию повернуть. Товар есть в меню сейчас. Мы его добавляем, но через время он удаляется из меню (помечается deleted_at в базе, если это важно). Т.е. мы его как-то должны пометить, что он удален. Причем в корзину добавили доступный, а через время он "недоступен"
Просто у меня сейчас в голове крутится, что объекты должны быть "always valid". Но тут мы к инварианту приходим не путем каких-то бизнес правил или действий, а из-за чего-то другого, в данном случае из-за того, что его кто-то удалил.
да. Пусть все что пользователь положил в корзину остается в таком виде как он положил. Просто в какой то момент нужно будет дополнительно проверить эту корзину на актуальность.