Улучшение обработки пользователей и middleware с возвратом данных

- Модифицирована функция upsert_user для возврата полных данных пользователя
- Обновлен UserMiddleware для сохранения данных пользователя в контексте
- Расширена функциональность register_middleware с поддержкой опционального исключения middleware
- Добавлена типизация и улучшена обработка middleware
This commit is contained in:
izzzzzi
2025-02-25 02:46:59 +05:00
parent 013b26ecc8
commit 8af59ffbfe
3 changed files with 76 additions and 17 deletions
+13 -2
View File
@@ -1081,7 +1081,7 @@ async def upsert_user(
language_code: str = None,
is_bot: bool = False,
session: Any = None,
):
) -> dict:
"""
Обновляет или вставляет информацию о пользователе в базу данных.
@@ -1094,6 +1094,9 @@ async def upsert_user(
is_bot (bool, optional): Флаг, указывающий является ли пользователь ботом
session (Any, optional): Существующая сессия базы данных
Returns:
dict: Словарь с информацией о пользователе после обновления/вставки
Raises:
Exception: В случае ошибки при работе с базой данных
"""
@@ -1110,7 +1113,8 @@ async def upsert_user(
close_conn = True
logger.info(f"Установлено новое подключение к базе данных для обновления пользователя {tg_id}")
await conn.execute(
# Выполняем вставку/обновление и сразу получаем обновленные данные
user_data = await conn.fetchrow(
"""
INSERT INTO users (tg_id, username, first_name, last_name, language_code, is_bot, created_at, updated_at)
VALUES ($1, $2, $3, $4, $5, $6, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
@@ -1122,6 +1126,9 @@ async def upsert_user(
language_code = COALESCE(EXCLUDED.language_code, users.language_code),
is_bot = EXCLUDED.is_bot,
updated_at = CURRENT_TIMESTAMP
RETURNING
id, tg_id, username, first_name, last_name, language_code,
is_bot, created_at, updated_at
""",
tg_id,
username,
@@ -1130,7 +1137,11 @@ async def upsert_user(
language_code,
is_bot,
)
logger.debug(f"Успешно обновлена информация о пользователе {tg_id}")
# Преобразуем результат в словарь
return dict(user_data)
except Exception as e:
logger.error(f"Ошибка при обновлении информации о пользователе {tg_id}: {e}")
raise