AI_Resume-Reviewer / app /supabase.py
YaminiVJ's picture
Upload 10 files
8780fb9 verified
"""
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()