shopbot/bot/getters/user.py
2024-12-25 04:30:33 +03:00

51 lines
1.5 KiB
Python

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,
}