Update routes/subscription.py
Browse files- routes/subscription.py +38 -0
routes/subscription.py
CHANGED
@@ -165,6 +165,44 @@ async def stripe_webhook(request: Request):
|
|
165 |
logger.error(f"❌ Failed to update subscription: {response_update.status_code} - {response_update.text}")
|
166 |
return {"status": "error", "message": "Failed to update subscription."}
|
167 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
168 |
except Exception as e:
|
169 |
logger.error(f"❌ Erro no webhook: {str(e)}")
|
170 |
return {"status": "error", "message": str(e)}
|
|
|
165 |
logger.error(f"❌ Failed to update subscription: {response_update.status_code} - {response_update.text}")
|
166 |
return {"status": "error", "message": "Failed to update subscription."}
|
167 |
|
168 |
+
if event_type == "customer.subscription.updated":
|
169 |
+
subscription = payload.get("data", {}).get("object", {})
|
170 |
+
subscription_id = subscription.get("id")
|
171 |
+
canceled_at = subscription.get("canceled_at") # Timestamp do cancelamento
|
172 |
+
cancel_status = subscription.get("cancel_at_period_end", False)
|
173 |
+
|
174 |
+
if canceled_at:
|
175 |
+
# Convertendo timestamp para data e horário de Nova York
|
176 |
+
ny_tz = pytz.timezone("America/New_York")
|
177 |
+
canceled_date = datetime.fromtimestamp(canceled_at, ny_tz).isoformat()
|
178 |
+
|
179 |
+
logger.info(f"🔹 Subscription {subscription_id} canceled at {canceled_date} (New York Time).")
|
180 |
+
|
181 |
+
# 🔹 Atualizando Supabase
|
182 |
+
update_url = f"{SUPABASE_URL}/rest/v1/Subscriptions?sub_id=eq.{subscription_id}"
|
183 |
+
update_data = {
|
184 |
+
"canceled": True,
|
185 |
+
"canceled_date": canceled_date
|
186 |
+
}
|
187 |
+
|
188 |
+
supabase_headers = {
|
189 |
+
"Authorization": f"Bearer {SUPABASE_KEY}",
|
190 |
+
"apikey": SUPABASE_KEY,
|
191 |
+
"Content-Type": "application/json"
|
192 |
+
}
|
193 |
+
|
194 |
+
response_update = requests.patch(update_url, headers=supabase_headers, json=update_data)
|
195 |
+
|
196 |
+
if response_update.status_code in [200, 204]:
|
197 |
+
logger.info(f"✅ Subscription {subscription_id} updated with canceled date.")
|
198 |
+
return {"status": "success", "message": "Subscription updated with cancellation date."}
|
199 |
+
else:
|
200 |
+
logger.error(f"❌ Failed to update subscription: {response_update.status_code} - {response_update.text}")
|
201 |
+
return {"status": "error", "message": "Failed to update subscription."}
|
202 |
+
else:
|
203 |
+
logger.info(f"🔹 Subscription {subscription_id} updated, but not canceled.")
|
204 |
+
return {"status": "success", "message": "Subscription updated but not canceled."}
|
205 |
+
|
206 |
except Exception as e:
|
207 |
logger.error(f"❌ Erro no webhook: {str(e)}")
|
208 |
return {"status": "error", "message": str(e)}
|