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

Update routes/subscription.py

Browse files
Files changed (1) hide show
  1. routes/subscription.py +8 -45
routes/subscription.py CHANGED
@@ -34,7 +34,7 @@ SUPABASE_HEADERS = {
34
 
35
  class CheckSubscriptionRequest(BaseModel):
36
  stylist_id: str
37
- user_token: str = Header(None, alias="User-key")
38
 
39
  class SubscriptionRequest(BaseModel):
40
  id: str # ID do estilista
@@ -476,19 +476,12 @@ def cancel_subscription(data: CancelSubscriptionRequest):
476
 
477
  @router.post("/check_subscription")
478
  async def check_subscription(
479
- data: CheckSubscriptionRequest,
480
- user_token: str = Header(None, alias="User-key")
481
  ):
482
  try:
483
- if not user_token:
484
- raise HTTPException(status_code=401, detail="Missing User-key header")
485
-
486
- # 🔹 Validar o token e obter user_id do cliente
487
- user_id = verify_token(user_token)
488
-
489
  # 🔹 Buscar o stripe_id do usuário no Supabase
490
  response_user = await async_request(
491
- f"{SUPABASE_URL}/rest/v1/User?id=eq.{user_id}",
492
  SUPABASE_HEADERS
493
  )
494
  user_data = response_user.json()
@@ -510,11 +503,11 @@ async def check_subscription(
510
 
511
  if not subscriptions or not subscriptions["data"]:
512
  # Se não houver assinaturas para o cliente, desativa as assinaturas associadas ao estilista no banco de dados
513
- logger.info(f"No active subscription found for user {user_id}. Deactivating all subscriptions for stylist {data.stylist_id}.")
514
 
515
  # 🔹 Buscar todas as assinaturas do estilista no banco de dados para este cliente
516
  response_subscriptions = await async_request(
517
- f"{SUPABASE_URL}/rest/v1/Subscriptions?customer_id=eq.{user_id}&stylist_id=eq.{data.stylist_id}",
518
  SUPABASE_HEADERS
519
  )
520
  if response_subscriptions.status_code == 200:
@@ -523,7 +516,7 @@ async def check_subscription(
523
  *(update_subscription_status(sub['id'], False) for sub in subscriptions_data)
524
  )
525
  else:
526
- logger.error(f"❌ Failed to fetch subscriptions from Supabase for stylist {data.stylist_id} and user {user_id}.")
527
 
528
  return {"status": "inactive", "message": "No active subscription found for stylist."}
529
 
@@ -553,7 +546,7 @@ async def check_subscription(
553
  # 🔹 Atualiza o banco de dados Supabase com os dados da assinatura
554
  subscription_data = {
555
  "stylist_id": data.stylist_id,
556
- "customer_id": user_id,
557
  "active": status == "active",
558
  "sub_id": subscription_id,
559
  "price_id": price_id,
@@ -602,34 +595,4 @@ async def check_subscription(
602
  raise HTTPException(status_code=500, detail=f"Stripe error: {str(e)}")
603
  except Exception as e:
604
  logger.error(f"Error checking subscription: {str(e)}")
605
- raise HTTPException(status_code=500, detail="Error checking subscription.")
606
-
607
-
608
- # Função assíncrona para fazer requisições de rede
609
- async def async_request(url, headers, json=None, method='GET'):
610
- method_func = requests.post if method == 'POST' else requests.get
611
- response = method_func(url, headers=headers, json=json)
612
- return response
613
-
614
- # Função assíncrona para chamar a Stripe API
615
- async def async_stripe_request(func, **kwargs):
616
- loop = asyncio.get_event_loop()
617
- response = await loop.run_in_executor(None, lambda: func(**kwargs))
618
- return response
619
-
620
- # Função assíncrona para atualizar o status de uma assinatura
621
- async def update_subscription_status(subscription_id, status):
622
- update_data = {
623
- "active": status
624
- }
625
- subscription_url = f"{SUPABASE_URL}/rest/v1/Subscriptions?id=eq.{subscription_id}"
626
- update_response = await async_request(
627
- subscription_url,
628
- SUPABASE_HEADERS,
629
- json=update_data,
630
- method='PATCH'
631
- )
632
- if update_response.status_code == 200:
633
- logger.info(f"✅ Subscription {subscription_id} deactivated successfully.")
634
- else:
635
- logger.error(f"❌ Failed to deactivate subscription {subscription_id}.")
 
34
 
35
  class CheckSubscriptionRequest(BaseModel):
36
  stylist_id: str
37
+ user_id: str # Agora recebemos diretamente o user_id
38
 
39
  class SubscriptionRequest(BaseModel):
40
  id: str # ID do estilista
 
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
 
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
  *(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
  # 🔹 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
  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.")