""" Setup script for document upload feature Run this after installing dependencies to initialize the feature """ import os import asyncio from dotenv import load_dotenv from supabase import create_client, Client load_dotenv() async def setup_documents_feature(): """Initialize document upload feature""" print("šŸš€ Setting up Document Upload Feature...") # Initialize Supabase supabase_url = os.getenv("SUPABASE_URL") supabase_key = os.getenv("SUPABASE_SERVICE_KEY") if not supabase_url or not supabase_key: print("āŒ Error: SUPABASE_URL and SUPABASE_SERVICE_KEY must be set in .env") return supabase: Client = create_client(supabase_url, supabase_key) print("āœ… Connected to Supabase") # Check if tables exist try: result = supabase.table("documents").select("id").limit(1).execute() print("āœ… Documents table exists") except Exception as e: print(f"āš ļø Documents table not found. Please run the migration SQL:") print(" backend/database/migrations/add_documents_tables.sql") print(f" Error: {str(e)}") return # Check storage bucket try: buckets = supabase.storage.list_buckets() bucket_names = [b.name for b in buckets] if "documents" not in bucket_names: print("šŸ“¦ Creating 'documents' storage bucket...") supabase.storage.create_bucket("documents", {"public": False}) print("āœ… Storage bucket created") else: print("āœ… Storage bucket exists") except Exception as e: print(f"āš ļø Could not check/create storage bucket: {str(e)}") print(" Please create it manually in Supabase Dashboard") # Set default system flags - PLAN-BASED configuration plans = ["free", "student", "pro"] features = ["chat", "mcq", "flashcard", "explain", "highyield"] # Default retention days per plan default_retention = { "free": 7, "student": 14, "pro": 30 } # Default document uploads per day per plan default_doc_uploads = { "free": 3, "student": 10, "pro": 50 } # Default feature limits per day per plan default_feature_limits = { "free": { "chat": 20, "mcq": 10, "flashcard": 10, "explain": 5, "highyield": 5 }, "student": { "chat": 100, "mcq": 50, "flashcard": 50, "explain": 30, "highyield": 30 }, "pro": { "chat": 500, "mcq": 200, "flashcard": 200, "explain": 100, "highyield": 100 } } print("\nšŸ“ Setting default plan-based configuration...") for plan in plans: print(f"\n šŸŽÆ Configuring {plan.upper()} plan:") # Document retention days per plan retention_flag = f"document_retention_{plan}" try: existing = supabase.table("system_flags").select("*").eq("flag_name", retention_flag).execute() if not existing.data: supabase.table("system_flags").insert({ "flag_name": retention_flag, "flag_value": str(default_retention[plan]) }).execute() print(f" āœ… Document retention: {default_retention[plan]} days") else: print(f" ā„¹ļø Document retention already set: {existing.data[0]['flag_value']} days") except Exception as e: print(f" āš ļø Could not set {retention_flag}: {str(e)}") # Document uploads per day per plan uploads_flag = f"document_uploads_daily_{plan}" try: existing = supabase.table("system_flags").select("*").eq("flag_name", uploads_flag).execute() if not existing.data: supabase.table("system_flags").insert({ "flag_name": uploads_flag, "flag_value": str(default_doc_uploads[plan]) }).execute() print(f" āœ… Document uploads: {default_doc_uploads[plan]}/day") else: print(f" ā„¹ļø Document uploads already set: {existing.data[0]['flag_value']}/day") except Exception as e: print(f" āš ļø Could not set {uploads_flag}: {str(e)}") # Feature limits per day per plan for feature in features: limit_flag = f"{feature}_daily_limit_{plan}" try: existing = supabase.table("system_flags").select("*").eq("flag_name", limit_flag).execute() if not existing.data: supabase.table("system_flags").insert({ "flag_name": limit_flag, "flag_value": str(default_feature_limits[plan][feature]) }).execute() print(f" āœ… {feature.capitalize()}: {default_feature_limits[plan][feature]}/day") else: print(f" ā„¹ļø {feature.capitalize()} already set: {existing.data[0]['flag_value']}/day") except Exception as e: print(f" āš ļø Could not set {limit_flag}: {str(e)}") print("\n✨ Document Upload Feature Setup Complete!") print("\nšŸ“š Next steps:") print(" 1. Install tesseract-ocr for image OCR (optional)") print(" 2. Configure rate limits in admin panel: /admin/rate-limits") print(" 3. Test upload at: /documents") print("\nšŸ’” Default limits configured:") print(" • Free: 7 days retention, 3 uploads/day") print(" • Student: 14 days retention, 10 uploads/day") print(" • Pro: 30 days retention, 50 uploads/day") if __name__ == "__main__": asyncio.run(setup_documents_feature())