plan-reset / main.py
AlyanAkram's picture
Update main.py
973b009 verified
from fastapi import FastAPI
import requests
import os
app = FastAPI()
SUPABASE_URL = os.getenv("SUPABASE_URL", "").strip()
SUPABASE_API_KEY = os.getenv("SUPABASE_API_KEY", "").strip()
@app.get("/reset-plans")
def reset_expired_plans():
print("📣 Starting plan reset task...")
print(f"✅ Using Supabase URL: {SUPABASE_URL}")
headers = {
"apikey": SUPABASE_API_KEY,
"Authorization": f"Bearer {SUPABASE_API_KEY}",
"Content-Type": "application/json"
}
url = f"{SUPABASE_URL}/rest/v1/users?select=id,plan,days_remaining"
print("📡 Fetching users with basic or premium plans...")
try:
r = requests.get(url, headers=headers)
if r.status_code != 200:
print(f"❌ Failed to fetch users: {r.text}")
return {"status": "error", "detail": r.text}
except Exception as e:
print(f"🚨 Exception while fetching users: {e}")
return {"status": "error", "exception": str(e)}
users = r.json()
print(f"🔍 Found {len(users)} users")
reset_count = 0
updated_count = 0
for user in users:
uid = user["id"]
plan = user.get("plan", "free")
days = user.get("days_remaining", 0)
print(f"👤 User {uid} - Plan: {plan}, Days Remaining: {days}")
if days <= 0 and plan in ("basic", "premium"):
print(f"➡️ Resetting user {uid} to free")
res = requests.patch(
f"{SUPABASE_URL}/rest/v1/users?id=eq.{uid}",
headers=headers,
json={"plan": "free", "days_remaining": 0}
)
if res.status_code == 204:
reset_count += 1
else:
print(f"❗ Failed to reset user {uid}: {res.text}")
elif days > 0 and plan in ("basic", "premium"):
print(f"📉 Decrementing days for user {uid} to {days - 1}")
res = requests.patch(
f"{SUPABASE_URL}/rest/v1/users?id=eq.{uid}",
headers=headers,
json={"days_remaining": days - 1}
)
if res.status_code == 204:
updated_count += 1
else:
print(f"❗ Failed to decrement days for user {uid}: {res.text}")
else:
print(f"✅ No action needed for user {uid}")
return {
"status": "success",
"reset_to_free": reset_count,
"decremented_days": updated_count
}