Интерфейс настоящего магазина: каталог с поиском и опечатками, корзина, доставка и налог по стране, оплата тестовой картой, отмена с возвратом денег и склад, где видно, как блокировка строк защищает остатки.
Классические романы в одном небольшом каталоге. Добавьте пару книг в корзину.
Остатки из той же базы, что видит каталог. Оформление блокирует строки книг, проверяет остатки и создаёт заказ в одной транзакции.
Анна и Борис одновременно оформляют «». Каждый хочет , на складе .
with transaction.atomic():
books = {b.id: b for b in Book.objects.select_for_update().filter(id__in=ids)}
errors = [stock_message(books[i.book_id]) for i in items
if i.quantity > books[i.book_id].stock]
if errors:
raise ValidationError({"detail": _("Not enough stock."), "items": errors})
order = Order.objects.create(buyer=user, currency=order_currency)
| Книга | Цена, USD | Вес | Остаток |
|---|
Обсудим архитектуру, сроки и бюджет за 15 минут в Telegram.