import logging from typing import Any, Dict from aiogram.types import User from aiogram_dialog import DialogManager from sqlalchemy import select from sqlalchemy.exc import SQLAlchemyError from shopbot.bot.database.db import async_session from shopbot.bot.database.models import UserModel async def username_getter( dialog_manager: DialogManager, event_from_user: User, **kwargs ) -> Dict[str, Any]: try: async with async_session() as session: user = await session.scalar( select(UserModel).where(UserModel.tg_id == event_from_user.id) ) if user: return { "username": user.username, "balance": user.balance, "purchased": user.purchased, } else: logging.warning( f"User with tg_id {event_from_user.id} not found in database." ) return { "username": event_from_user.username, "balance": 0, "purchased": 0, } except SQLAlchemyError as e: logging.error(f"Database error: {e}", exc_info=True) return { "username": event_from_user.username, "balance": 0, "purchased": 0, } except Exception as e: logging.error(f"An unexpected error occurred: {e}", exc_info=True) return { "username": event_from_user.username, "balance": 0, "purchased": 0, }