From dca5ed5f7e58434cb4592d5b8421081aa7eb6053 Mon Sep 17 00:00:00 2001 From: rizwanisready Date: Wed, 24 Apr 2024 15:54:05 +0530 Subject: [PATCH] changed webhook --- manage_subscriptions/api/views.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/manage_subscriptions/api/views.py b/manage_subscriptions/api/views.py index a7fa41d..28c80c5 100644 --- a/manage_subscriptions/api/views.py +++ b/manage_subscriptions/api/views.py @@ -177,20 +177,21 @@ class StripeWebhookTest(APIView): event = stripe.Event.construct_from(json.loads(payload), stripe.api_key) event_id = event["id"] event_type = event["type"] - # Check if the event has been processed already - if WebhookEvent.objects.filter(event_id=event_id, status="processed").exists(): + + webhook_event, created = WebhookEvent.objects.get_or_create( + event_id=event_id, + defaults={ + "event_type": event_type, + "event_payload": json.loads(payload), + }, + ) + + if not created and webhook_event.status == "processed": return ApiResponse.success( status=status.HTTP_208_ALREADY_REPORTED, message="Event already processed", ) - # Log event processing - WebhookEvent.objects.create( - event_id=event_id, - event_type=event_type, - event_payload=json.loads(payload), # optional - ) - payment_service = services.PaymentProcessingService(webhook_data=event) payment_service.process_event() webhook_event = WebhookEvent.objects.get(event_id=event_id) @@ -226,12 +227,12 @@ class StripeWebhookTest(APIView): event_id=event_id, status="failed", error_message=str(e), - event_payload=json.loads(payload) # Optionally store payload for audit + event_payload=json.loads(payload), # Optionally store payload for audit ) return ApiResponse.error( status=status.HTTP_500_INTERNAL_SERVER_ERROR, message="Error processing event", - errors=str(e) + errors=str(e), )