Back to questions
СБЕР
Middle
5
Магазин книг: покупатель кладет книгу в корзину, жмет 'Купить'. Как гарантировать создание только одного заказа при многократном нажатии? Каким методом создадим заказ и какие параметры передадим?
Companies where asked
Answer from AI
sobes.tech AI
Чтобы гарантировать создание только одного заказа при многократном нажатии кнопки "Купить", нужно реализовать идемпотентность операции создания заказа.
Основные подходы:
- На клиенте блокировать кнопку после первого нажатия, но это не надежно.
- На сервере использовать уникальный идентификатор сессии или корзины и проверять, был ли уже создан заказ для этой корзины.
- Использовать транзакцию и проверку существования заказа с таким же идентификатором.
Метод создания заказа обычно будет что-то вроде createOrder(cartId, userId, paymentDetails).
Параметры:
cartId— уникальный идентификатор корзины или сессии, чтобы проверить, был ли уже создан заказ.userId— идентификатор покупателя.paymentDetails— данные для оплаты.
Пример на псевдокоде:
public Order createOrder(String cartId, String userId, PaymentDetails payment) {
// Проверяем, существует ли уже заказ для этой корзины
Order existingOrder = orderRepository.findByCartId(cartId);
if (existingOrder != null) {
return existingOrder; // Возвращаем существующий заказ
}
// Создаем новый заказ
Order order = new Order(userId, cartId, payment);
orderRepository.save(order);
return order;
}
Таким образом, повторные нажатия не приведут к созданию дубликатов.