AlyanAkram commited on
Commit
c22e31f
·
verified ·
1 Parent(s): ff3a3c7

Upload 4 files

Browse files
Files changed (4) hide show
  1. Dockerfile +9 -0
  2. README.md +2 -0
  3. main.py +46 -0
  4. requirements.txt +4 -0
Dockerfile ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.10-slim
2
+
3
+ WORKDIR /app
4
+ COPY requirements.txt .
5
+ RUN pip install --no-cache-dir -r requirements.txt
6
+
7
+ COPY app app
8
+
9
+ CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"]
README.md ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ # Supabase Plan Reset
2
+ Auto-reset Supabase user plans to "free" after 30 days using FastAPI.
main.py ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI, Request
2
+ import requests
3
+ from datetime import datetime, timezone
4
+ from dateutil import parser
5
+ import os
6
+
7
+ app = FastAPI()
8
+
9
+ SUPABASE_URL = os.getenv("SUPABASE_URL")
10
+ SUPABASE_API_KEY = os.getenv("SUPABASE_API_KEY")
11
+
12
+ @app.get("/reset-plans")
13
+ def reset_expired_plans():
14
+ headers = {
15
+ "apikey": SUPABASE_API_KEY,
16
+ "Authorization": f"Bearer {SUPABASE_API_KEY}",
17
+ "Content-Type": "application/json"
18
+ }
19
+
20
+ # Step 1: Fetch users with basic or premium
21
+ r = requests.get(
22
+ f"{SUPABASE_URL}/rest/v1/users?plan=in.(basic,premium)&select=id,plan_set_at",
23
+ headers=headers
24
+ )
25
+
26
+ if r.status_code != 200:
27
+ return {"status": "error", "detail": r.text}
28
+
29
+ users = r.json()
30
+
31
+ now = datetime.now(timezone.utc)
32
+ expired_ids = [
33
+ user["id"]
34
+ for user in users
35
+ if user.get("plan_set_at") and (now - parser.parse(user["plan_set_at"])).days >= 30
36
+ ]
37
+
38
+ # Step 2: Reset their plan to free
39
+ for uid in expired_ids:
40
+ requests.patch(
41
+ f"{SUPABASE_URL}/rest/v1/users?id=eq.{uid}",
42
+ headers=headers,
43
+ json={"plan": "free", "plan_set_at": None}
44
+ )
45
+
46
+ return {"status": "success", "reset_count": len(expired_ids)}
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ requests
4
+ python-dateutil