from aiogram.types import User as TelegramUser from sqlalchemy import select from bot.config import ADMIN_ID from bot.db.models import User from bot.db.session import async_session async def upsert_user_from_telegram(telegram_user: TelegramUser | None) -> User | None: if telegram_user is None: return None async with async_session() as session: result = await session.execute( select(User).where(User.telegram_id == telegram_user.id) ) user = result.scalar_one_or_none() if user is None: user = User(telegram_id=telegram_user.id) session.add(user) user.username = telegram_user.username user.first_name = telegram_user.first_name user.last_name = telegram_user.last_name user.is_admin = telegram_user.id == ADMIN_ID await session.commit() await session.refresh(user) return user