habulaj commited on
Commit
f8e0b91
·
verified ·
1 Parent(s): 6454a2a

Update routes/subscription.py

Browse files
Files changed (1) hide show
  1. routes/subscription.py +11 -6
routes/subscription.py CHANGED
@@ -114,21 +114,26 @@ async def update_subscription(
114
  if not subscription:
115
  raise HTTPException(status_code=404, detail="Subscription not found.")
116
 
117
- # 🔹 2. Verificar se a assinatura pertence ao usuário (se houver um campo identificador)
118
- # Se o modelo de dados do Stripe salvar o user_id no metadata, podemos validar assim:
119
  if subscription.get("metadata", {}).get("user_id") != user_id:
120
  raise HTTPException(status_code=403, detail="You are not authorized to modify this subscription.")
121
 
122
- # 🔹 3. Atualizar a assinatura para o novo preço
 
 
 
 
 
123
  updated_subscription = stripe.Subscription.modify(
124
  subscription_id,
125
- items=[{"id": subscription["items"]["data"][0]["id"], "price": new_price_id}]
 
126
  )
127
 
128
  logger.info(f"✅ Subscription {subscription_id} updated to new price {new_price_id}")
129
 
130
  return {
131
- "message": "Subscription updated successfully!",
132
  "subscription_id": subscription_id,
133
  "new_price_id": new_price_id
134
  }
@@ -140,7 +145,7 @@ async def update_subscription(
140
  except Exception as e:
141
  logger.error(f"❌ Error updating subscription: {e}")
142
  raise HTTPException(status_code=500, detail=f"Error updating subscription: {str(e)}")
143
-
144
  @router.post("/sync_emergency_payments")
145
  async def sync_emergency_payments(request: Request, data: EmergencyPaymentRequest):
146
  try:
 
114
  if not subscription:
115
  raise HTTPException(status_code=404, detail="Subscription not found.")
116
 
117
+ # 🔹 2. Verificar se a assinatura pertence ao usuário (caso esteja salvo no metadata)
 
118
  if subscription.get("metadata", {}).get("user_id") != user_id:
119
  raise HTTPException(status_code=403, detail="You are not authorized to modify this subscription.")
120
 
121
+ # 🔹 3. Reativar a assinatura (removendo cancelamento)
122
+ if subscription.status == "canceled" or subscription.cancel_at_period_end:
123
+ stripe.Subscription.modify(subscription_id, cancel_at_period_end=False)
124
+ logger.info(f"✅ Subscription {subscription_id} reactivated.")
125
+
126
+ # 🔹 4. Atualizar a assinatura para o novo preço (sem proration)
127
  updated_subscription = stripe.Subscription.modify(
128
  subscription_id,
129
+ items=[{"id": subscription["items"]["data"][0]["id"], "price": new_price_id}],
130
+ proration_behavior="none" # 🔹 Garante que o novo preço só entra na próxima fatura
131
  )
132
 
133
  logger.info(f"✅ Subscription {subscription_id} updated to new price {new_price_id}")
134
 
135
  return {
136
+ "message": "Subscription reactivated and updated successfully!",
137
  "subscription_id": subscription_id,
138
  "new_price_id": new_price_id
139
  }
 
145
  except Exception as e:
146
  logger.error(f"❌ Error updating subscription: {e}")
147
  raise HTTPException(status_code=500, detail=f"Error updating subscription: {str(e)}")
148
+
149
  @router.post("/sync_emergency_payments")
150
  async def sync_emergency_payments(request: Request, data: EmergencyPaymentRequest):
151
  try: