Spaces:
Paused
Paused
import os | |
from dotenv import load_dotenv | |
from supabase import create_client, Client | |
from typing import Optional | |
load_dotenv() | |
class SupabaseConnection: | |
"""Gerenciador de conexão com Supabase""" | |
_instance: Optional['SupabaseConnection'] = None | |
def __new__(cls): | |
"""Implementa Singleton para evitar múltiplas conexões""" | |
if cls._instance is None: | |
cls._instance = super().__new__(cls) | |
return cls._instance | |
def __init__(self): | |
"""Inicializa a conexão com Supabase""" | |
if not hasattr(self, 'client'): | |
self.supabase_url = os.getenv("SUPABASE_URL") | |
self.supabase_key = os.getenv("SUPABASE_KEY") | |
self.service_role_key = os.getenv("SUPABASE_SERVICE_ROLE_KEY") | |
if not all([self.supabase_url, self.supabase_key, self.service_role_key]): | |
raise ValueError( | |
"SUPABASE_URL, SUPABASE_KEY e SUPABASE_SERVICE_ROLE_KEY devem estar definidos no arquivo .env" | |
) | |
# Cliente normal para operações regulares | |
self.client = create_client( | |
supabase_url=self.supabase_url, | |
supabase_key=self.supabase_key | |
) | |
# Cliente admin para operações administrativas | |
self.admin_client = create_client( | |
supabase_url=self.supabase_url, | |
supabase_key=self.service_role_key | |
) | |
def get_client(self) -> Client: | |
"""Retorna o cliente Supabase regular""" | |
return self.client | |
def get_admin_client(self) -> Client: | |
"""Retorna o cliente Supabase com privilégios administrativos""" | |
return self.admin_client | |
def test_connection(self) -> bool: | |
"""Testa a conexão com Supabase""" | |
try: | |
# Tenta fazer uma query simples | |
print("🔍 Testando conexão com Supabase...") | |
response = self.client.table('users').select("*").limit(1).execute() | |
print("✅ Conexão Supabase bem sucedida!") | |
return True | |
except Exception as e: | |
print(f"❌ Erro na conexão Supabase: {str(e)}") | |
return False | |
def get_table(self, table_name: str): | |
""" | |
Retorna uma referência para uma tabela específica | |
Args: | |
table_name: Nome da tabela | |
Returns: | |
PostgrestFilterBuilder: Referência para a tabela | |
""" | |
return self.client.table(table_name) |