Sobes.tech
Middle

Κατάστημα βιβλίων: ο πελάτης βάζει ένα βιβλίο στο καλάθι, πατάει 'Αγορά'. Πώς διασφαλίζουμε ότι θα δημιουργηθεί μόνο μια παραγγελία σε περίπτωση πολλαπλών κλικ; Ποια μέθοδο θα χρησιμοποιήσουμε για να δημιουργήσουμε την παραγγελία και ποια παραμέτρους θα περάσουμε;

sobes.tech AI

Απάντηση από 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;
}

Таким образом, повторные нажатия не приведут к созданию дубликатов.