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()