Update routes/subscription.py
Browse files- 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 |
-
|
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.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|