from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from app.core.config import settings import logging import os logger = logging.getLogger(__name__) # استفاده از pymysql برای MySQL DATABASE_URL = settings.DATABASE_URL.replace("mysql://", "mysql+pymysql://") engine = create_engine( DATABASE_URL, pool_size=20, max_overflow=30, pool_pre_ping=True, pool_recycle=3600, echo=settings.DEBUG ) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() def init_db(): """ ایجاد جداول در پایگاه داده MySQL """ try: Base.metadata.create_all(bind=engine) logger.info("✅ جداول پایگاه داده MySQL ایجاد شدند") # ایجاد کاربر ادمین اولیه from app.crud import user_crud from app.schemas import UserCreate from app.core.deps import get_db db_gen = get_db() db = next(db_gen) try: admin_user = user_crud.get_by_email(db, email="admin@zpir.ir") if not admin_user: user_crud.create( db, obj_in=UserCreate( username="admin", email="admin@zpir.ir", password="Admin@Zp1r!r", full_name="مدیر سیستم", is_superuser=True, is_verified=True ) ) logger.info("✅ کاربر ادمین ایجاد شد (admin@zpir.ir)") except Exception as e: logger.warning(f"⚠️ خطا در ایجاد کاربر ادمین: {e}") finally: db.close() try: next(db_gen) except StopIteration: pass except Exception as e: logger.error(f"❌ خطا در ایجاد پایگاه داده: {e}") raise