diff --git a/backend/app.py b/backend/app.py index 2e690ba9..8fcc038c 100644 --- a/backend/app.py +++ b/backend/app.py @@ -12,6 +12,7 @@ from collections import defaultdict from loguru import logger from dotenv import load_dotenv import asyncio +from datetime import datetime from middleware.monitoring_middleware import monitoring_middleware # Load environment variables @@ -175,6 +176,62 @@ async def health(): """Health check endpoint.""" return health_check() +@app.get("/health/database") +async def database_health_check(): + """Database health check endpoint including persona tables verification.""" + try: + from services.database import get_db_session + from models.persona_models import WritingPersona, PlatformPersona, PersonaAnalysisResult, PersonaValidationResult + + session = get_db_session() + if not session: + return {"status": "error", "message": "Could not get database session"} + + # Test all persona tables + tables_status = {} + try: + session.query(WritingPersona).first() + tables_status["writing_personas"] = "ok" + except Exception as e: + tables_status["writing_personas"] = f"error: {str(e)}" + + try: + session.query(PlatformPersona).first() + tables_status["platform_personas"] = "ok" + except Exception as e: + tables_status["platform_personas"] = f"error: {str(e)}" + + try: + session.query(PersonaAnalysisResult).first() + tables_status["persona_analysis_results"] = "ok" + except Exception as e: + tables_status["persona_analysis_results"] = f"error: {str(e)}" + + try: + session.query(PersonaValidationResult).first() + tables_status["persona_validation_results"] = "ok" + except Exception as e: + tables_status["persona_validation_results"] = f"error: {str(e)}" + + session.close() + + # Check if all tables are ok + all_ok = all(status == "ok" for status in tables_status.values()) + + return { + "status": "healthy" if all_ok else "warning", + "message": "Database connection successful" if all_ok else "Some persona tables may have issues", + "persona_tables": tables_status, + "timestamp": datetime.utcnow().isoformat() + } + + except Exception as e: + return { + "status": "error", + "message": f"Database health check failed: {str(e)}", + "timestamp": datetime.utcnow().isoformat() + } + # Onboarding status endpoints @app.get("/api/onboarding/status") async def onboarding_status(): diff --git a/backend/start_alwrity_backend.py b/backend/start_alwrity_backend.py index 460778b4..1156e5e6 100644 --- a/backend/start_alwrity_backend.py +++ b/backend/start_alwrity_backend.py @@ -214,6 +214,30 @@ def setup_environment(): print("āœ… Environment setup complete") +def verify_persona_tables(): + """Verify that persona tables exist and are accessible.""" + print("šŸ” Verifying persona tables...") + try: + from services.database import get_db_session + from models.persona_models import WritingPersona, PlatformPersona, PersonaAnalysisResult, PersonaValidationResult + + session = get_db_session() + if session: + # Try to query all persona tables to verify they exist + session.query(WritingPersona).first() + session.query(PlatformPersona).first() + session.query(PersonaAnalysisResult).first() + session.query(PersonaValidationResult).first() + session.close() + print("āœ… All persona tables verified successfully") + return True + else: + print("āš ļø Warning: Could not get database session") + return False + except Exception as e: + print(f"āš ļø Warning: Could not verify persona tables: {e}") + return False + def start_backend(enable_reload=False): """Start the backend server.""" print("šŸš€ Starting ALwrity Backend...") @@ -241,8 +265,17 @@ def start_backend(enable_reload=False): try: # Import and run the app from app import app + from services.database import init_database import uvicorn + # Explicitly initialize database before starting server + print("šŸ—„ļø Initializing database...") + init_database() + print("āœ… Database initialized successfully") + + # Verify persona tables exist + verify_persona_tables() + print("\n🌐 Backend is starting...") print(" šŸ“– API Documentation: http://localhost:8000/api/docs") print(" šŸ” Health Check: http://localhost:8000/health")