habulaj commited on
Commit
46c88e6
·
verified ·
1 Parent(s): b63d14c

Update routes/subscription.py

Browse files
Files changed (1) hide show
  1. routes/subscription.py +39 -7
routes/subscription.py CHANGED
@@ -476,12 +476,14 @@ def cancel_subscription(data: CancelSubscriptionRequest):
476
 
477
  @router.post("/check_subscription")
478
  async def check_subscription(
479
- data: CheckSubscriptionRequest
480
  ):
481
  try:
 
 
482
  # 🔹 Buscar o stripe_id do usuário no Supabase
483
  response_user = await async_request(
484
- f"{SUPABASE_URL}/rest/v1/User?id=eq.{data.user_id}",
485
  SUPABASE_HEADERS
486
  )
487
  user_data = response_user.json()
@@ -503,11 +505,11 @@ async def check_subscription(
503
 
504
  if not subscriptions or not subscriptions["data"]:
505
  # Se não houver assinaturas para o cliente, desativa as assinaturas associadas ao estilista no banco de dados
506
- logger.info(f"No active subscription found for user {data.user_id}. Deactivating all subscriptions for stylist {data.stylist_id}.")
507
 
508
  # 🔹 Buscar todas as assinaturas do estilista no banco de dados para este cliente
509
  response_subscriptions = await async_request(
510
- f"{SUPABASE_URL}/rest/v1/Subscriptions?customer_id=eq.{data.user_id}&stylist_id=eq.{data.stylist_id}",
511
  SUPABASE_HEADERS
512
  )
513
  if response_subscriptions.status_code == 200:
@@ -516,7 +518,7 @@ async def check_subscription(
516
  *(update_subscription_status(sub['id'], False) for sub in subscriptions_data)
517
  )
518
  else:
519
- logger.error(f"❌ Failed to fetch subscriptions from Supabase for stylist {data.stylist_id} and user {data.user_id}.")
520
 
521
  return {"status": "inactive", "message": "No active subscription found for stylist."}
522
 
@@ -546,7 +548,7 @@ async def check_subscription(
546
  # 🔹 Atualiza o banco de dados Supabase com os dados da assinatura
547
  subscription_data = {
548
  "stylist_id": data.stylist_id,
549
- "customer_id": data.user_id,
550
  "active": status == "active",
551
  "sub_id": subscription_id,
552
  "price_id": price_id,
@@ -595,4 +597,34 @@ async def check_subscription(
595
  raise HTTPException(status_code=500, detail=f"Stripe error: {str(e)}")
596
  except Exception as e:
597
  logger.error(f"Error checking subscription: {str(e)}")
598
- raise HTTPException(status_code=500, detail="Error checking subscription.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
476
 
477
  @router.post("/check_subscription")
478
  async def check_subscription(
479
+ data: CheckSubscriptionRequest # Agora recebemos user_id diretamente do corpo
480
  ):
481
  try:
482
+ user_id = data.user_id # Não precisamos mais verificar o token, pois user_id vem na requisição
483
+
484
  # 🔹 Buscar o stripe_id do usuário no Supabase
485
  response_user = await async_request(
486
+ f"{SUPABASE_URL}/rest/v1/User?id=eq.{user_id}",
487
  SUPABASE_HEADERS
488
  )
489
  user_data = response_user.json()
 
505
 
506
  if not subscriptions or not subscriptions["data"]:
507
  # Se não houver assinaturas para o cliente, desativa as assinaturas associadas ao estilista no banco de dados
508
+ logger.info(f"No active subscription found for user {user_id}. Deactivating all subscriptions for stylist {data.stylist_id}.")
509
 
510
  # 🔹 Buscar todas as assinaturas do estilista no banco de dados para este cliente
511
  response_subscriptions = await async_request(
512
+ f"{SUPABASE_URL}/rest/v1/Subscriptions?customer_id=eq.{user_id}&stylist_id=eq.{data.stylist_id}",
513
  SUPABASE_HEADERS
514
  )
515
  if response_subscriptions.status_code == 200:
 
518
  *(update_subscription_status(sub['id'], False) for sub in subscriptions_data)
519
  )
520
  else:
521
+ logger.error(f"❌ Failed to fetch subscriptions from Supabase for stylist {data.stylist_id} and user {user_id}.")
522
 
523
  return {"status": "inactive", "message": "No active subscription found for stylist."}
524
 
 
548
  # 🔹 Atualiza o banco de dados Supabase com os dados da assinatura
549
  subscription_data = {
550
  "stylist_id": data.stylist_id,
551
+ "customer_id": user_id,
552
  "active": status == "active",
553
  "sub_id": subscription_id,
554
  "price_id": price_id,
 
597
  raise HTTPException(status_code=500, detail=f"Stripe error: {str(e)}")
598
  except Exception as e:
599
  logger.error(f"Error checking subscription: {str(e)}")
600
+ raise HTTPException(status_code=500, detail="Error checking subscription.")
601
+
602
+
603
+ # Função assíncrona para fazer requisições de rede
604
+ async def async_request(url, headers, json=None, method='GET'):
605
+ method_func = requests.post if method == 'POST' else requests.get
606
+ response = method_func(url, headers=headers, json=json)
607
+ return response
608
+
609
+ # Função assíncrona para chamar a Stripe API
610
+ async def async_stripe_request(func, **kwargs):
611
+ loop = asyncio.get_event_loop()
612
+ response = await loop.run_in_executor(None, lambda: func(**kwargs))
613
+ return response
614
+
615
+ # Função assíncrona para atualizar o status de uma assinatura
616
+ async def update_subscription_status(subscription_id, status):
617
+ update_data = {
618
+ "active": status
619
+ }
620
+ subscription_url = f"{SUPABASE_URL}/rest/v1/Subscriptions?id=eq.{subscription_id}"
621
+ update_response = await async_request(
622
+ subscription_url,
623
+ SUPABASE_HEADERS,
624
+ json=update_data,
625
+ method='PATCH'
626
+ )
627
+ if update_response.status_code == 200:
628
+ logger.info(f"✅ Subscription {subscription_id} deactivated successfully.")
629
+ else:
630
+ logger.error(f"❌ Failed to deactivate subscription {subscription_id}.")