This commit is contained in:
liaibo
2025-12-06 16:47:17 +08:00
parent 15921bfeb7
commit 9ef8e06d67
75 changed files with 559237 additions and 93 deletions
+28 -1
View File
@@ -12,10 +12,11 @@ class SupabaseRestClient:
def __init__(self) -> None:
base_url = settings.supabase_url.rstrip("/")
apikey = settings.supabase_anon_key or settings.supabase_service_role_key
self.client = httpx.Client(
base_url=f"{base_url}/rest/v1",
headers={
"apikey": settings.supabase_service_role_key,
"apikey": apikey,
"Authorization": f"Bearer {settings.supabase_service_role_key}",
},
timeout=10.0,
@@ -43,6 +44,32 @@ class SupabaseRestClient:
return data[0]
return None
def select(
self,
table: str,
filters: Optional[Dict[str, Any]] = None,
*,
columns: str = "*",
order: Optional[str] = None,
limit: Optional[int] = None,
) -> list[Dict[str, Any]]:
params: Dict[str, Any] = {"select": columns}
if filters:
for key, value in filters.items():
params[key] = f"eq.{value}"
if order:
params["order"] = order
if limit is not None:
params["limit"] = limit
response = self.client.get(f"/{table}", params=params)
response.raise_for_status()
data = response.json()
if isinstance(data, list):
return data
if data:
return [data]
return []
def update(self, table: str, filters: Dict[str, Any], payload: Dict[str, Any]) -> None:
params = {key: f"eq.{value}" for key, value in filters.items()}
response = self.client.patch(