Spaces:
Running
Running
File size: 3,549 Bytes
8780fb9 |
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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
"""
Supabase client setup and database operations
"""
from supabase import create_client, Client
from datetime import datetime
from typing import Optional, Dict, Any
import logging
from app.config import settings
logger = logging.getLogger(__name__)
class SupabaseService:
"""Service for Supabase database operations"""
def __init__(self):
"""Initialize Supabase client"""
self.client: Optional[Client] = None
self._setup_client()
def _setup_client(self):
"""Setup Supabase client"""
try:
if settings.SUPABASE_URL and settings.SUPABASE_KEY:
self.client = create_client(settings.SUPABASE_URL, settings.SUPABASE_KEY)
logger.info("Supabase client initialized successfully")
else:
logger.warning("Supabase credentials not provided - database operations will be disabled")
except Exception as e:
logger.error(f"Failed to initialize Supabase client: {str(e)}")
self.client = None
async def insert_resume_review(
self,
resume_text: str,
job_description: str,
match_score: float,
feedback: str
) -> Optional[Dict[str, Any]]:
"""
Insert resume review into database
Args:
resume_text: Extracted resume text
job_description: Job description
match_score: Similarity score
feedback: AI-generated feedback
Returns:
Dict with inserted record or None if failed
"""
if not self.client:
logger.warning("Supabase client not available - skipping database insert")
return None
try:
data = {
"resume_text": resume_text,
"job_description": job_description,
"match_score": match_score,
"feedback": feedback,
"created_at": datetime.utcnow().isoformat()
}
result = self.client.table("resume_reviews").insert(data).execute()
if result.data:
logger.info("Resume review stored in database successfully")
return result.data[0]
else:
logger.error("Failed to insert resume review - no data returned")
return None
except Exception as e:
logger.error(f"Database insert failed: {str(e)}")
return None
async def get_resume_reviews(self, limit: int = 10) -> list:
"""
Get recent resume reviews
Args:
limit: Maximum number of reviews to return
Returns:
List of recent reviews
"""
if not self.client:
logger.warning("Supabase client not available - returning empty list")
return []
try:
result = self.client.table("resume_reviews").select("*").order("created_at", desc=True).limit(limit).execute()
if result.data:
logger.info(f"Retrieved {len(result.data)} recent reviews")
return result.data
else:
logger.info("No recent reviews found")
return []
except Exception as e:
logger.error(f"Failed to retrieve reviews: {str(e)}")
return []
# Global service instance
supabase_service = SupabaseService() |