Update routes/subscription.py
Browse files- routes/subscription.py +17 -15
routes/subscription.py
CHANGED
@@ -318,29 +318,29 @@ async def stripe_webhook(request: Request):
|
|
318 |
subscription_id = subscription.get("id")
|
319 |
canceled_at = subscription.get("canceled_at") # Timestamp do cancelamento
|
320 |
cancel_status = subscription.get("cancel_at_period_end", False)
|
321 |
-
|
322 |
if canceled_at:
|
323 |
# Convertendo timestamp para data e horário de Nova York
|
324 |
ny_tz = pytz.timezone("America/New_York")
|
325 |
canceled_date = datetime.fromtimestamp(canceled_at, ny_tz).isoformat()
|
326 |
-
|
327 |
logger.info(f"🔹 Subscription {subscription_id} canceled at {canceled_date} (New York Time).")
|
328 |
-
|
329 |
# 🔹 Atualizando Supabase
|
330 |
update_url = f"{SUPABASE_URL}/rest/v1/Subscriptions?sub_id=eq.{subscription_id}"
|
331 |
update_data = {
|
332 |
"canceled": True,
|
333 |
"canceled_date": canceled_date
|
334 |
}
|
335 |
-
|
336 |
supabase_headers = {
|
337 |
"Authorization": f"Bearer {SUPABASE_KEY}",
|
338 |
"apikey": SUPABASE_KEY,
|
339 |
"Content-Type": "application/json"
|
340 |
}
|
341 |
-
|
342 |
response_update = requests.patch(update_url, headers=supabase_headers, json=update_data)
|
343 |
-
|
344 |
if response_update.status_code in [200, 204]:
|
345 |
logger.info(f"✅ Subscription {subscription_id} updated with canceled date.")
|
346 |
return {"status": "success", "message": "Subscription updated with cancellation date."}
|
@@ -350,25 +350,27 @@ async def stripe_webhook(request: Request):
|
|
350 |
else:
|
351 |
logger.info(f"🔹 Subscription {subscription_id} updated, but not canceled.")
|
352 |
return {"status": "success", "message": "Subscription updated but not canceled."}
|
353 |
-
|
354 |
-
|
|
|
|
|
355 |
payment_intent = payload.get("data", {}).get("object", {})
|
356 |
-
|
357 |
# 🔹 Pegando os valores do metadado
|
358 |
stylist_id = payment_intent.get("metadata", {}).get("stylist_id")
|
359 |
client_id = payment_intent.get("metadata", {}).get("client_id")
|
360 |
subscription_id = payment_intent.get("metadata", {}).get("subscription_id")
|
361 |
amount_received = payment_intent.get("amount_received", 0) # Valor recebido (em centavos)
|
362 |
-
|
363 |
if not all([stylist_id, client_id, subscription_id]):
|
364 |
logger.error("❌ Faltando dados essenciais no metadado do Payment Intent.")
|
365 |
return {"status": "error", "message": "Missing essential metadata."}
|
366 |
-
|
367 |
logger.info(f"🔹 Payment Intent succeeded for subscription {subscription_id}")
|
368 |
logger.info(f"👤 Client ID: {client_id}")
|
369 |
logger.info(f"👗 Stylist ID: {stylist_id}")
|
370 |
logger.info(f"💰 Price: R$ {amount_received / 100:.2f}")
|
371 |
-
|
372 |
# 🔹 Inserir dados na tabela Emergency_sub no Supabase
|
373 |
emergency_sub_data = {
|
374 |
"sub_id": subscription_id, # Subscription ID
|
@@ -376,19 +378,19 @@ async def stripe_webhook(request: Request):
|
|
376 |
"client_id": client_id, # Client ID
|
377 |
"price": amount_received # Price in cents
|
378 |
}
|
379 |
-
|
380 |
emergency_sub_url = f"{SUPABASE_URL}/rest/v1/Emergency_sub"
|
381 |
response_emergency_sub = requests.post(
|
382 |
emergency_sub_url,
|
383 |
headers=supabase_headers,
|
384 |
json=emergency_sub_data
|
385 |
)
|
386 |
-
|
387 |
if response_emergency_sub.status_code == 201:
|
388 |
logger.info(f"✅ Emergency subscription data added successfully for client {client_id}")
|
389 |
else:
|
390 |
logger.error(f"❌ Failed to add emergency subscription: {response_emergency_sub.status_code} - {response_emergency_sub.text}")
|
391 |
-
|
392 |
return {
|
393 |
"status": "success",
|
394 |
"message": "Emergency subscription added successfully"
|
|
|
318 |
subscription_id = subscription.get("id")
|
319 |
canceled_at = subscription.get("canceled_at") # Timestamp do cancelamento
|
320 |
cancel_status = subscription.get("cancel_at_period_end", False)
|
321 |
+
|
322 |
if canceled_at:
|
323 |
# Convertendo timestamp para data e horário de Nova York
|
324 |
ny_tz = pytz.timezone("America/New_York")
|
325 |
canceled_date = datetime.fromtimestamp(canceled_at, ny_tz).isoformat()
|
326 |
+
|
327 |
logger.info(f"🔹 Subscription {subscription_id} canceled at {canceled_date} (New York Time).")
|
328 |
+
|
329 |
# 🔹 Atualizando Supabase
|
330 |
update_url = f"{SUPABASE_URL}/rest/v1/Subscriptions?sub_id=eq.{subscription_id}"
|
331 |
update_data = {
|
332 |
"canceled": True,
|
333 |
"canceled_date": canceled_date
|
334 |
}
|
335 |
+
|
336 |
supabase_headers = {
|
337 |
"Authorization": f"Bearer {SUPABASE_KEY}",
|
338 |
"apikey": SUPABASE_KEY,
|
339 |
"Content-Type": "application/json"
|
340 |
}
|
341 |
+
|
342 |
response_update = requests.patch(update_url, headers=supabase_headers, json=update_data)
|
343 |
+
|
344 |
if response_update.status_code in [200, 204]:
|
345 |
logger.info(f"✅ Subscription {subscription_id} updated with canceled date.")
|
346 |
return {"status": "success", "message": "Subscription updated with cancellation date."}
|
|
|
350 |
else:
|
351 |
logger.info(f"🔹 Subscription {subscription_id} updated, but not canceled.")
|
352 |
return {"status": "success", "message": "Subscription updated but not canceled."}
|
353 |
+
|
354 |
+
# A partir daqui, o bloco do código pode continuar sem problemas.
|
355 |
+
|
356 |
+
elif event_type == "payment_intent.succeeded":
|
357 |
payment_intent = payload.get("data", {}).get("object", {})
|
358 |
+
|
359 |
# 🔹 Pegando os valores do metadado
|
360 |
stylist_id = payment_intent.get("metadata", {}).get("stylist_id")
|
361 |
client_id = payment_intent.get("metadata", {}).get("client_id")
|
362 |
subscription_id = payment_intent.get("metadata", {}).get("subscription_id")
|
363 |
amount_received = payment_intent.get("amount_received", 0) # Valor recebido (em centavos)
|
364 |
+
|
365 |
if not all([stylist_id, client_id, subscription_id]):
|
366 |
logger.error("❌ Faltando dados essenciais no metadado do Payment Intent.")
|
367 |
return {"status": "error", "message": "Missing essential metadata."}
|
368 |
+
|
369 |
logger.info(f"🔹 Payment Intent succeeded for subscription {subscription_id}")
|
370 |
logger.info(f"👤 Client ID: {client_id}")
|
371 |
logger.info(f"👗 Stylist ID: {stylist_id}")
|
372 |
logger.info(f"💰 Price: R$ {amount_received / 100:.2f}")
|
373 |
+
|
374 |
# 🔹 Inserir dados na tabela Emergency_sub no Supabase
|
375 |
emergency_sub_data = {
|
376 |
"sub_id": subscription_id, # Subscription ID
|
|
|
378 |
"client_id": client_id, # Client ID
|
379 |
"price": amount_received # Price in cents
|
380 |
}
|
381 |
+
|
382 |
emergency_sub_url = f"{SUPABASE_URL}/rest/v1/Emergency_sub"
|
383 |
response_emergency_sub = requests.post(
|
384 |
emergency_sub_url,
|
385 |
headers=supabase_headers,
|
386 |
json=emergency_sub_data
|
387 |
)
|
388 |
+
|
389 |
if response_emergency_sub.status_code == 201:
|
390 |
logger.info(f"✅ Emergency subscription data added successfully for client {client_id}")
|
391 |
else:
|
392 |
logger.error(f"❌ Failed to add emergency subscription: {response_emergency_sub.status_code} - {response_emergency_sub.text}")
|
393 |
+
|
394 |
return {
|
395 |
"status": "success",
|
396 |
"message": "Emergency subscription added successfully"
|