import os import uuid from datetime import datetime from supabase import create_client, Client from dotenv import load_dotenv load_dotenv() class SupabaseHandler: def __init__(self): url: str = os.getenv("SUPABASE_URL") key: str = os.getenv("SUPABASE_ANON_KEY") if not url or not key: raise ValueError("SUPABASE_URL and SUPABASE_ANON_KEY must be set in environment variables") self.supabase: Client = create_client(url, key) def store_evaluation_result(self, teacher_email, evaluation_data): """ Store evaluation result in Supabase with a unique key Returns the unique key for retrieval """ try: # Generate unique key unique_key = str(uuid.uuid4()) # Prepare data for storage storage_data = { "unique_key": unique_key, "teacher_email": teacher_email, "evaluation_data": evaluation_data, "created_at": datetime.utcnow().isoformat(), "total_students": evaluation_data.get("total_students", 0) } # Insert into Supabase result = self.supabase.table("evaluation_results").insert(storage_data).execute() if result.data: print(f"Successfully stored evaluation result with key: {unique_key}") return unique_key else: print("Failed to store evaluation result") return None except Exception as e: print(f"Error storing evaluation result: {str(e)}") return None def get_evaluation_result(self, unique_key): """ Retrieve evaluation result by unique key """ try: result = self.supabase.table("evaluation_results").select("*").eq("unique_key", unique_key).execute() if result.data and len(result.data) > 0: return result.data[0] else: return None except Exception as e: print(f"Error retrieving evaluation result: {str(e)}") return None def get_teacher_evaluations(self, teacher_email): """ Get all evaluation results for a specific teacher """ try: result = self.supabase.table("evaluation_results").select("unique_key", "created_at", "total_students").eq("teacher_email", teacher_email).order("created_at", desc=True).execute() if result.data: return result.data else: return [] except Exception as e: print(f"Error retrieving teacher evaluations: {str(e)}") return []