lightning / subscriptions.py
sharktide's picture
Update subscriptions.py
8f0180b verified
Raw
History Blame
2.44 kB
from supabase import create_client, Client
import os
SUPABASE_URL = os.getenv("SUPABASE_URL")
SUPABASE_KEY = os.getenv("SUPABASE_SERVICE_ROLE_KEY")
supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)
async def fetch_subscription(email: str):
user_res = supabase.rpc("get_user_info", {"email_input": email}).execute()
if not user_res.data:
return None
user = user_res.data[0]
# 2. Fetch Stripe customer
cust_res = (
supabase.table("stripe.customers")
.select("*")
.eq("email", email)
.execute()
)
if not cust_res.data:
return {
"email": email,
"signed_up": user["created_at"],
"subscription": None
}
customer = cust_res.data[0]
# 3. Fetch subscriptions
sub_res = (
supabase.table("stripe.subscriptions")
.select("*")
.eq("customer", customer["id"])
.in_("status", ["active", "trialing", "past_due"])
.execute()
)
if not sub_res.data:
return {
"email": email,
"signed_up": user["created_at"],
"subscription": None
}
subscriptions = []
for s in sub_res.data:
# Extract price_id from subscription item
price_id = (
s["items"]["data"][0]["price"]["id"]
if s.get("items") and s["items"].get("data")
else None
)
# 4. Fetch product info for this price
product_info = None
product_name = None
nickname = None
if price_id:
price_res = (
supabase.table("stripe.prices")
.select("id, nickname, product:product_id(name, description)")
.eq("id", price_id)
.execute()
)
if price_res.data:
product_info = price_res.data[0]
nickname = product_info.get("nickname")
if product_info.get("product"):
product_name = product_info["product"].get("name")
subscriptions.append({
"status": s["status"],
"subscription_id": s["id"],
"current_period_end": s["current_period_end"],
"product_name": product_name,
"nickname": nickname
})
return {
"email": email,
"signed_up": user["created_at"],
"subscription": subscriptions
}