import asyncio import logging from sqlalchemy.ext.asyncio import create_async_engine from Backend.core.config import settings from Backend.database.models import Base from Backend.database.seed import seed_data logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) async def init_models(): """Drops and recreates all tables, then seeds initial data.""" logger.info("Initializing database...") database_url = settings.database_url.replace("port=6543", "port=5432").replace("postgresql://", "postgresql+asyncpg://") engine = create_async_engine( database_url, echo=True, connect_args={ "statement_cache_size": 0, "prepared_statement_cache_size": 0, } ) async with engine.begin() as conn: logger.info("Dropping existing tables...") logger.info("Creating new tables...") await conn.run_sync(Base.metadata.create_all) logger.info("Schema initialized. Seeding data...") try: await seed_data(engine) logger.info("Seeding completed successfully!") except Exception as e: logger.error(f"Seeding failed: {e}") await engine.dispose() logger.info("Database initialization finished.") if __name__ == "__main__": asyncio.run(init_models())