Update routes/subscription.py
Browse files- routes/subscription.py +54 -6
routes/subscription.py
CHANGED
@@ -359,19 +359,67 @@ def cancel_subscription(data: CancelSubscriptionRequest):
|
|
359 |
|
360 |
# 🚀 Verificação de Assinatura
|
361 |
@router.post("/check_subscription")
|
362 |
-
def check_subscription(
|
|
|
|
|
|
|
363 |
try:
|
364 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
365 |
subscriptions = stripe.Subscription.list(
|
366 |
-
customer=
|
367 |
-
status="active",
|
368 |
-
expand=["data.items"]
|
369 |
)
|
370 |
|
371 |
-
# Verificar se existe uma assinatura ativa para o estilista
|
372 |
for subscription in subscriptions["data"]:
|
373 |
# Verifica se o stylist_id está presente no metadata da assinatura
|
374 |
if subscription.metadata.get("stylist_id") == data.stylist_id:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
375 |
return {
|
376 |
"status": "active",
|
377 |
"subscription_id": subscription.id,
|
|
|
359 |
|
360 |
# 🚀 Verificação de Assinatura
|
361 |
@router.post("/check_subscription")
|
362 |
+
def check_subscription(
|
363 |
+
data: CheckSubscriptionRequest,
|
364 |
+
user_token: str = Header(None, alias="User-key") # Recebendo o token do cabeçalho
|
365 |
+
):
|
366 |
try:
|
367 |
+
if not user_token:
|
368 |
+
raise HTTPException(status_code=401, detail="Missing User-key header")
|
369 |
+
|
370 |
+
# 🔹 Validar o token do cliente e obter user_id (cliente)
|
371 |
+
user_id = verify_token(user_token)
|
372 |
+
|
373 |
+
# 🔹 Buscar todas as assinaturas ativas para o usuário (cliente)
|
374 |
subscriptions = stripe.Subscription.list(
|
375 |
+
customer=user_id, # ID do cliente obtido do token
|
376 |
+
status="active", # Assinaturas ativas
|
377 |
+
expand=["data.items"] # Expande os dados para pegar os itens e o metadata
|
378 |
)
|
379 |
|
380 |
+
# 🔹 Verificar se existe uma assinatura ativa para o estilista
|
381 |
for subscription in subscriptions["data"]:
|
382 |
# Verifica se o stylist_id está presente no metadata da assinatura
|
383 |
if subscription.metadata.get("stylist_id") == data.stylist_id:
|
384 |
+
# Se encontrou a assinatura ativa, vamos registrar a assinatura no Supabase
|
385 |
+
subscription_id = subscription.id # ID da assinatura
|
386 |
+
price_id = subscription.items.data[0].price.id # ID do preço da assinatura
|
387 |
+
|
388 |
+
# 🔹 Definir o fuso horário de Nova York usando pytz
|
389 |
+
nyc_tz = pytz.timezone('America/New_York')
|
390 |
+
created_at = datetime.now(nyc_tz) # Hora atual de Nova York
|
391 |
+
|
392 |
+
# 🔹 Inserir dados na tabela Subscriptions no Supabase
|
393 |
+
subscription_data = {
|
394 |
+
"stylist_id": data.stylist_id, # ID do estilista
|
395 |
+
"customer_id": user_id, # ID do cliente
|
396 |
+
"active": True, # Assinatura ativa
|
397 |
+
"created_at": created_at.isoformat(), # Hora atual em formato ISO 8601
|
398 |
+
"sub_id": subscription_id, # ID da assinatura
|
399 |
+
"price_id": price_id # ID do preço
|
400 |
+
}
|
401 |
+
|
402 |
+
# Configuração do cabeçalho de autenticação para o Supabase
|
403 |
+
supabase_headers = {
|
404 |
+
"Authorization": f"Bearer {SUPABASE_KEY}",
|
405 |
+
"apikey": SUPABASE_KEY,
|
406 |
+
"Content-Type": "application/json"
|
407 |
+
}
|
408 |
+
|
409 |
+
# Inserir nova linha na tabela Subscriptions (não precisamos definir 'id' explicitamente)
|
410 |
+
subscription_url = f"{SUPABASE_URL}/rest/v1/Subscriptions"
|
411 |
+
response_subscription = requests.post(
|
412 |
+
subscription_url,
|
413 |
+
headers=supabase_headers,
|
414 |
+
json=subscription_data
|
415 |
+
)
|
416 |
+
|
417 |
+
# Verificando a resposta da inserção
|
418 |
+
if response_subscription.status_code == 201:
|
419 |
+
logger.info(f"✅ Subscription added successfully for user {user_id}")
|
420 |
+
else:
|
421 |
+
logger.error(f"❌ Failed to add subscription: {response_subscription.status_code} - {response_subscription.text}")
|
422 |
+
|
423 |
return {
|
424 |
"status": "active",
|
425 |
"subscription_id": subscription.id,
|