""" Supabase client for interacting with Supabase services. This provides access to: - Storage (file uploads) - Auth (alternative authentication) - Realtime (subscriptions) - Edge Functions - PostgREST API (alternative to SQLModel for certain operations) """ from supabase import create_client, Client from functools import lru_cache from ..core.config.config import get_settings @lru_cache() def get_supabase_client() -> Client: """ Create and cache a Supabase client instance. Returns: Client: Supabase client for API operations """ settings = get_settings() if not settings.SUPABASE_URL or not settings.SUPABASE_API_KEY: raise ValueError( "SUPABASE_URL and SUPABASE_API_KEY must be set in environment variables" ) supabase: Client = create_client( settings.SUPABASE_URL, settings.SUPABASE_API_KEY ) return supabase # Convenience function for dependency injection in FastAPI def get_supabase() -> Client: """ Dependency for FastAPI routes to get Supabase client. Usage: @app.get("/example") async def example(supabase: Client = Depends(get_supabase)): # Use supabase client here pass """ return get_supabase_client()