Spaces:
Sleeping
Sleeping
File size: 2,969 Bytes
bab4aa8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | import os
import httpx
from .http_client import http_client
class SupabaseQuerier:
def __init__(self, url: str = None, key: str = None):
self.url = url or os.environ.get("SUPABASE_URL", "")
self.key = key or os.environ.get("SUPABASE_ANON_KEY", "")
async def get_product_by_slug(self, slug: str) -> dict | None:
if not self.url or not self.key:
print("[SupabaseQuerier] Warning: Supabase credentials missing.")
return None
base_url = self.url.rstrip("/")
query_url = f"{base_url}/rest/v1/inventory?slug=eq.{slug}&select=sku,slug,name,price_rupees,staging_dirs"
headers = {
"apikey": self.key,
"Authorization": f"Bearer {self.key}"
}
client = http_client if http_client is not None else httpx.AsyncClient()
close_client = http_client is None
try:
response = await client.get(query_url, headers=headers, timeout=5.0)
if response.status_code == 200:
data = response.json()
if isinstance(data, list) and len(data) > 0:
return data[0]
else:
print(f"[SupabaseQuerier] Query failed: {response.status_code} - {response.text}")
except Exception as e:
print(f"[SupabaseQuerier] Error querying Supabase: {e}")
finally:
if close_client:
await client.aclose()
return None
async def get_order_history(self, user_id: str, days: int = 90) -> list:
if not self.url or not self.key:
print("[SupabaseQuerier] Warning: Supabase credentials missing.")
return []
from datetime import datetime, timedelta
cutoff_date = (datetime.utcnow() - timedelta(days=days)).isoformat()
base_url = self.url.rstrip("/")
query_url = f"{base_url}/rest/v1/user_carts?user_id=eq.{user_id}&status=eq.processed&created_at=gte.{cutoff_date}&select=items,created_at"
headers = {
"apikey": self.key,
"Authorization": f"Bearer {self.key}"
}
client = http_client if http_client is not None else httpx.AsyncClient()
close_client = http_client is None
try:
print(f"DEBUG: Query URL: {query_url}")
response = await client.get(query_url, headers=headers, timeout=5.0)
print(f"DEBUG: Status Code: {response.status_code}")
if response.status_code == 200:
print(f"DEBUG: Response length: {len(response.json())}")
return response.json()
else:
print(f"[SupabaseQuerier] Order history query failed: {response.status_code} - {response.text}")
except Exception as e:
print(f"[SupabaseQuerier] Error querying Supabase order history: {e}")
finally:
if close_client:
await client.aclose()
return []
|