File size: 1,425 Bytes
962a395
954e0aa
962a395
 
 
dc64ef1
 
 
 
962a395
 
dc64ef1
 
 
 
 
 
86a47ea
 
 
dc64ef1
 
 
 
 
37bcb58
 
 
 
 
 
 
 
 
 
 
 
 
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
from typing import Optional
from loguru import logger
from supabase import Client, create_client
from src.config import settings

# Singletons — created once, reused on every request
_supabase_client: Optional[Client] = None
_auth_supabase_client: Optional[Client] = None


def get_supabase() -> Optional[Client]:
    global _supabase_client
    if _supabase_client is None:
        if not settings.supabase_url or not settings.supabase_key:
            return None
        _supabase_client = create_client(settings.supabase_url, settings.supabase_key)
    return _supabase_client


def get_auth_supabase() -> Optional[Client]:
    global _auth_supabase_client
    if _auth_supabase_client is None:
        if not settings.supabase_url or not settings.supabase_anon_key:
            return None
        _auth_supabase_client = create_client(settings.supabase_url, settings.supabase_anon_key)
    return _auth_supabase_client


def warmup_database() -> None:
    """Eagerly instantiate Supabase clients and pre-warm TLS connections during server boot."""
    db_client = get_supabase()
    get_auth_supabase()
    if db_client:
        try:
            db_client.table("profiles").select("id").limit(1).execute()
            logger.info("Supabase database connection warmed up successfully.")
        except Exception as e:
            logger.warning(f"Database warmup query failed (safe to ignore if offline/testing): {e}")