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