File size: 3,123 Bytes
e697769
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env python3
"""
Database Initialization Script
Creates all tables and seeds initial data for MediLens
"""

import asyncio
import os
import sys
from pathlib import Path

# Add backend to path
backend_dir = Path(__file__).parent.parent
sys.path.insert(0, str(backend_dir))

# Load .env file manually
env_file = backend_dir / ".env"
if env_file.exists():
    with open(env_file, 'r') as f:
        for line in f:
            line = line.strip()
            if line and not line.startswith('#') and '=' in line:
                key, value = line.split('=', 1)
                # Remove surrounding quotes if present
                value = value.strip().strip("'").strip('"')
                os.environ[key] = value

from app.database import db
from app.database.models import Role


async def init_database():
    """Initialize database with tables and seed data"""
    print("=" * 60)
    print("MediLens Database Initialization")
    print("=" * 60)
    
    # Initialize database connection
    print("\n[1/3] Connecting to Neon Postgres...")
    db.initialize()
    print("✓ Connected")
    
    # Create all tables
    print("\n[2/3] Creating database schema...")
    await db.create_all_tables()
    print("✓ Schema created")
    
    # Seed initial data
    print("\n[3/3] Seeding initial data...")
    async with db.session_scope() as session:
        # Check if roles exist
        from sqlalchemy import select
        result = await session.execute(select(Role))
        existing_roles = result.scalars().all()
        
        if not existing_roles:
            # Create default roles
            roles = [
                Role(
                    name='patient',
                    description='Standard patient user',
                    permissions=['view_own_assessments', 'create_assessment', 'chat']
                ),
                Role(
                    name='clinician',
                    description='Healthcare provider',
                    permissions=[
                        'view_all_assessments', 'create_assessment', 
                        'review_assessments', 'export_data', 'chat'
                    ]
                ),
                Role(
                    name='admin',
                    description='System administrator',
                    permissions=[
                        'manage_users', 'manage_organizations', 
                        'view_audit_logs', 'manage_roles', 'all'
                    ]
                ),
                Role(
                    name='researcher',
                    description='Research access only',
                    permissions=['view_anonymized_data', 'export_data']
                ),
            ]
            
            session.add_all(roles)
            print(f"✓ Created {len(roles)} default roles")
        else:
            print(f"✓ Found {len(existing_roles)} existing roles")
    
    # Close connection
    await db.close()
    
    print("\n" + "=" * 60)
    print("✓ Database initialization complete!")
    print("=" * 60)


if __name__ == "__main__":
    asyncio.run(init_database())