from sqlalchemy import text from sqlalchemy.orm import Session import logging from app.db.base import Base from app.db.engine import engine from app.models.user import User, Role # Import models to ensure they're registered logger = logging.getLogger(__name__) def init_db() -> None: """Initialize database schemas and tables""" with engine.begin() as conn: # Create schemas conn.execute(text("CREATE SCHEMA IF NOT EXISTS fastapi")) conn.execute(text("CREATE SCHEMA IF NOT EXISTS operationbi")) conn.execute(text("CREATE SCHEMA IF NOT EXISTS rawdata")) # Create all tables Base.metadata.create_all(bind=conn) logger.info("Database schemas and tables created") # Seed default roles seed_roles() def seed_roles() -> None: """Seed default roles if they don't exist""" from app.db.session import SessionLocal db = SessionLocal() try: roles_data = [ {"name": "admin", "description": "Full system access - can manage users and access all features"}, {"name": "operation", "description": "Data management access - can upload and manage data"} ] for role_data in roles_data: existing = db.query(Role).filter(Role.name == role_data["name"]).first() if not existing: role = Role(**role_data) db.add(role) logger.info(f"Created role: {role_data['name']}") else: logger.info(f"Role already exists: {role_data['name']}") db.commit() logger.info("Role seeding completed") except Exception as e: logger.error(f"Error seeding roles: {e}") db.rollback() finally: db.close()