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

60 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import logging
from typing import Any, Dict
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 Account
def _format_account_short_info(account: Account) -> str:
return f"🌍 {account.region} | 🎮 {account.current_rank} | 💰 {account.price:.2f}"
async def get_purchase_history(
dialog_manager: DialogManager, **kwargs
) -> Dict[str, Any]:
user_tg_id = dialog_manager.event.from_user.id
try:
async with async_session() as session:
result = await session.execute(
select(Account).where(Account.buyer == user_tg_id)
)
purchased_accounts = result.scalars().all()
if purchased_accounts:
text = "🛍️ Ваша история покупок:"
else:
logging.warning(f"User with tg_id {user_tg_id} has no purchases")
text = "🛍️ У вас пока нет покупок, пора купить что-нибудь)"
return {
"purchased_accounts": [
(_format_account_short_info(account), account.id)
for account in purchased_accounts
],
"text": text,
}
except SQLAlchemyError as e:
logging.error(f"Database error: {e}", exc_info=True)
return {
"purchased_accounts": [],
"text": "❌ Произошла ошибка при работе с базой данных.",
}
except Exception as e:
logging.error(f"An unexpected error occurred: {e}", exc_info=True)
return {"purchased_accounts": [], "text": "❌ Произошла непредвиденная ошибка."}
async def get_history_account_details(
dialog_manager: DialogManager, **kwargs
) -> Dict[str, str]:
account_info = dialog_manager.current_context().dialog_data.get("account_info")
if not account_info:
logging.warning("No account info found in dialog data")
return {"account_info": "❌ Информация об аккаунте недоступна."}
return {"account_info": account_info}