Skip to content

Commit 866cbb1

Browse files
committed
Update fields explicitly in verkkokauppa webhooks and background tasks
This is to avoid race conditions between the two so that states for example end up in the correct state.
1 parent 816ae1b commit 866cbb1

3 files changed

Lines changed: 8 additions & 8 deletions

File tree

api/webhooks/views.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,12 @@ def create(self, request: Request, *args: Any, **kwargs: Any) -> Response:
6565
payment_order.status = OrderStatus.PAID
6666
payment_order.payment_id = payment_id
6767
payment_order.processed_at = local_datetime()
68-
payment_order.save()
68+
payment_order.save(update_fields=["status", "payment_id", "processed_at"])
6969

7070
reservation: Reservation | None = payment_order.reservation
7171
if reservation is not None and reservation.state == ReservationStateChoice.WAITING_FOR_PAYMENT:
7272
reservation.state = ReservationStateChoice.CONFIRMED
73-
reservation.save()
73+
reservation.save(update_fields=["state"])
7474
ReservationEmailNotificationSender.send_confirmation_email(reservation=reservation)
7575

7676
return Response(data={"message": "Order payment completed successfully"}, status=200)
@@ -116,7 +116,7 @@ def create(self, request: Request, *args: Any, **kwargs: Any) -> Response:
116116

117117
payment_order.status = OrderStatus.CANCELLED
118118
payment_order.processed_at = local_datetime()
119-
payment_order.save()
119+
payment_order.save(update_fields=["status", "processed_at"])
120120

121121
return Response(data={"message": "Order cancellation completed successfully"}, status=200)
122122

@@ -168,6 +168,6 @@ def create(self, request: Request, *args: Any, **kwargs: Any) -> Response:
168168
payment_order.refund_id = refund_id
169169
payment_order.status = OrderStatus.REFUNDED
170170
payment_order.processed_at = local_datetime()
171-
payment_order.save()
171+
payment_order.save(update_fields=["refund_id", "status", "processed_at"])
172172

173173
return Response(data={"message": "Order refund completed successfully"}, status=200)

merchants/pruning.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ def update_expired_orders() -> None:
4646
VerkkokauppaAPIClient.cancel_order(order_uuid=order.remote_id, user_uuid=order.reservation_user_uuid)
4747

4848
order.processed_at = local_datetime()
49-
order.save()
49+
order.save(update_fields=["status", "processed_at"])
5050

5151
# Confirm the reservation and send confirmation email
5252
reservation: Reservation = order.reservation
5353
if order.status == OrderStatus.PAID and reservation.state == ReservationStateChoice.WAITING_FOR_PAYMENT:
5454
reservation.state = ReservationStateChoice.CONFIRMED
55-
reservation.save()
55+
reservation.save(update_fields=["state"])
5656
ReservationEmailNotificationSender.send_confirmation_email(reservation=reservation)
5757

5858
except GetPaymentError as err:

reservations/tasks.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def refund_paid_reservation_task(reservation_pk: int) -> None:
5454
if not settings.MOCK_VERKKOKAUPPA_API_ENABLED:
5555
refund = VerkkokauppaAPIClient.refund_order(order_uuid=payment_order.remote_id)
5656
payment_order.refund_id = refund.refund_id
57-
payment_order.save()
57+
payment_order.save(update_fields=["refund_id"])
5858
else:
5959
payment_order.refund_id = uuid.uuid4()
60-
payment_order.save()
60+
payment_order.save(update_fields=["refund_id"])

0 commit comments

Comments
 (0)