Spaces:
Running
Running
| 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 | |
| } | |