Spaces:
Runtime error
Runtime error
| """ | |
| Initialize database - create tables and add sample data | |
| """ | |
| import sys | |
| import os | |
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | |
| from config.database import engine, Base, SessionLocal | |
| from database.models import * | |
| from datetime import datetime, date, timedelta | |
| import hashlib | |
| def create_tables(): | |
| """Create all database tables""" | |
| print("Creating database tables...") | |
| Base.metadata.create_all(bind=engine) | |
| print("✅ Tables created successfully!") | |
| def add_sample_data(): | |
| """Add sample data for testing""" | |
| db = SessionLocal() | |
| try: | |
| # Check if data already exists | |
| existing_users = db.query(User).first() | |
| if existing_users: | |
| print("⚠️ Database already has data. Skipping sample data.") | |
| return | |
| print("Adding sample data...") | |
| # Create sample therapist user | |
| therapist_user = User( | |
| email="therapist@example.com", | |
| username="dr_smith", | |
| hashed_password=hashlib.sha256("password123".encode()).hexdigest(), | |
| first_name="Sarah", | |
| last_name="Smith", | |
| role=UserRole.THERAPIST, | |
| is_verified=True | |
| ) | |
| db.add(therapist_user) | |
| db.flush() | |
| # Create therapist profile | |
| therapist = Therapist( | |
| user_id=therapist_user.id, | |
| license_number="SLP12345", | |
| specialization="Stuttering and Fluency", | |
| clinic_name="Speech Wellness Center", | |
| phone="555-0100", | |
| bio="Specialized in stuttering therapy with 10 years of experience" | |
| ) | |
| db.add(therapist) | |
| db.flush() | |
| # Create sample patient users | |
| patient_user1 = User( | |
| email="patient1@example.com", | |
| username="john_doe", | |
| hashed_password=hashlib.sha256("password123".encode()).hexdigest(), | |
| first_name="John", | |
| last_name="Doe", | |
| role=UserRole.PATIENT, | |
| is_verified=True | |
| ) | |
| db.add(patient_user1) | |
| db.flush() | |
| # Create patient profile | |
| patient1 = Patient( | |
| user_id=patient_user1.id, | |
| therapist_id=therapist.id, | |
| date_of_birth=date(2000, 5, 15), | |
| age=24, | |
| gender="Male", | |
| diagnosis="Developmental stuttering", | |
| severity_level="Moderate", | |
| therapy_goals=["Reduce stuttering frequency", "Improve fluency in conversations"], | |
| preferred_technique="prolonged_speech" | |
| ) | |
| db.add(patient1) | |
| db.flush() | |
| # Create sample assignment | |
| assignment = Assignment( | |
| therapist_id=therapist.id, | |
| patient_id=patient1.id, | |
| title="Daily Conversation Practice", | |
| description="Practice conversational speech using prolonged speech technique", | |
| practice_type="conversation", | |
| technique="prolonged_speech", | |
| target_sessions=5, | |
| target_duration_minutes=10, | |
| parameters={"topic": "hobbies", "difficulty": "intermediate"}, | |
| due_date=datetime.now() + timedelta(days=7) | |
| ) | |
| db.add(assignment) | |
| # Create a sample completed session | |
| session = PracticeSession( | |
| patient_id=patient1.id, | |
| assignment_id=assignment.id, | |
| practice_type="conversation", | |
| technique="prolonged_speech", | |
| duration_seconds=300, | |
| prompt_text="Tell me about your favorite hobby", | |
| transcribed_text="I really enjoy playing guitar in my free time", | |
| total_words=10, | |
| words_per_minute=120, | |
| is_completed=True, | |
| completed_at=datetime.now() | |
| ) | |
| db.add(session) | |
| db.flush() | |
| # Create analysis for the session | |
| analysis = SessionAnalysis( | |
| session_id=session.id, | |
| stutter_analysis={"total_stutters": 2, "types": {"repetition": 1, "block": 1}}, | |
| fluency_analysis={"prolongation_percentage": 75, "consistency": 0.8}, | |
| total_stutters=2, | |
| stutter_frequency_percent=5.0, | |
| fluency_score=75, | |
| rushed_speech_severity="minimal", | |
| struggled_phonemes=["g", "t"], | |
| patient_feedback="Good use of prolonged speech technique. Keep practicing smooth transitions." | |
| ) | |
| db.add(analysis) | |
| db.commit() | |
| print("✅ Sample data added successfully!") | |
| except Exception as e: | |
| print(f"❌ Error adding sample data: {e}") | |
| db.rollback() | |
| finally: | |
| db.close() | |
| def reset_database(): | |
| """Drop all tables and recreate""" | |
| print("⚠️ Dropping all tables...") | |
| Base.metadata.drop_all(bind=engine) | |
| create_tables() | |
| add_sample_data() | |
| if __name__ == "__main__": | |
| import argparse | |
| parser = argparse.ArgumentParser(description="Database initialization") | |
| parser.add_argument("--reset", action="store_true", help="Drop and recreate all tables") | |
| parser.add_argument("--sample-data", action="store_true", help="Add sample data") | |
| args = parser.parse_args() | |
| if args.reset: | |
| response = input("⚠️ This will DELETE all data. Are you sure? (yes/no): ") | |
| if response.lower() == "yes": | |
| reset_database() | |
| else: | |
| print("Cancelled.") | |
| else: | |
| create_tables() | |
| if args.sample_data: | |
| add_sample_data() |