Update routes/subscription.py
Browse files- routes/subscription.py +25 -5
routes/subscription.py
CHANGED
@@ -534,6 +534,7 @@ async def stripe_webhook(request: Request):
|
|
534 |
canceled_at = subscription.get("canceled_at") # Timestamp do cancelamento
|
535 |
cancel_status = subscription.get("cancel_at_period_end", False)
|
536 |
|
|
|
537 |
if canceled_at:
|
538 |
# Convertendo timestamp para data e horário de Nova York
|
539 |
ny_tz = pytz.timezone("America/New_York")
|
@@ -541,7 +542,7 @@ async def stripe_webhook(request: Request):
|
|
541 |
|
542 |
logger.info(f"🔹 Subscription {subscription_id} canceled at {canceled_date} (New York Time).")
|
543 |
|
544 |
-
#
|
545 |
update_url = f"{SUPABASE_URL}/rest/v1/Subscriptions?sub_id=eq.{subscription_id}"
|
546 |
update_data = {
|
547 |
"canceled": True,
|
@@ -562,11 +563,30 @@ async def stripe_webhook(request: Request):
|
|
562 |
else:
|
563 |
logger.error(f"❌ Failed to update subscription: {response_update.status_code} - {response_update.text}")
|
564 |
return {"status": "error", "message": "Failed to update subscription."}
|
565 |
-
else:
|
566 |
-
logger.info(f"🔹 Subscription {subscription_id} updated, but not canceled.")
|
567 |
-
return {"status": "success", "message": "Subscription updated but not canceled."}
|
568 |
|
569 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
570 |
|
571 |
elif event_type == "payment_intent.succeeded":
|
572 |
payment_intent = payload.get("data", {}).get("object", {})
|
|
|
534 |
canceled_at = subscription.get("canceled_at") # Timestamp do cancelamento
|
535 |
cancel_status = subscription.get("cancel_at_period_end", False)
|
536 |
|
537 |
+
# Verifica se a assinatura foi cancelada
|
538 |
if canceled_at:
|
539 |
# Convertendo timestamp para data e horário de Nova York
|
540 |
ny_tz = pytz.timezone("America/New_York")
|
|
|
542 |
|
543 |
logger.info(f"🔹 Subscription {subscription_id} canceled at {canceled_date} (New York Time).")
|
544 |
|
545 |
+
# Atualizando no Supabase a assinatura como cancelada
|
546 |
update_url = f"{SUPABASE_URL}/rest/v1/Subscriptions?sub_id=eq.{subscription_id}"
|
547 |
update_data = {
|
548 |
"canceled": True,
|
|
|
563 |
else:
|
564 |
logger.error(f"❌ Failed to update subscription: {response_update.status_code} - {response_update.text}")
|
565 |
return {"status": "error", "message": "Failed to update subscription."}
|
|
|
|
|
|
|
566 |
|
567 |
+
# Caso a assinatura tenha sido reativada (cancel_at_period_end=False)
|
568 |
+
elif not cancel_status:
|
569 |
+
logger.info(f"🔹 Subscription {subscription_id} reactivated.")
|
570 |
+
|
571 |
+
# Atualizando o status no Supabase para reativado
|
572 |
+
update_url = f"{SUPABASE_URL}/rest/v1/Subscriptions?sub_id=eq.{subscription_id}"
|
573 |
+
update_data = {
|
574 |
+
"canceled": False,
|
575 |
+
"canceled_date": None # Remove a data de cancelamento
|
576 |
+
}
|
577 |
+
|
578 |
+
response_update = requests.patch(update_url, headers=supabase_headers, json=update_data)
|
579 |
+
|
580 |
+
if response_update.status_code in [200, 204]:
|
581 |
+
logger.info(f"✅ Subscription {subscription_id} reactivated and canceled data removed.")
|
582 |
+
return {"status": "success", "message": "Subscription reactivated and canceled date removed."}
|
583 |
+
else:
|
584 |
+
logger.error(f"❌ Failed to update subscription: {response_update.status_code} - {response_update.text}")
|
585 |
+
return {"status": "error", "message": "Failed to update subscription."}
|
586 |
+
|
587 |
+
else:
|
588 |
+
logger.info(f"🔹 Subscription {subscription_id} updated, but not canceled or reactivated.")
|
589 |
+
return {"status": "success", "message": "Subscription updated but not canceled or reactivated."}
|
590 |
|
591 |
elif event_type == "payment_intent.succeeded":
|
592 |
payment_intent = payload.get("data", {}).get("object", {})
|