Улучшение обработки пользователей и middleware с возвратом данных
- Модифицирована функция upsert_user для возврата полных данных пользователя - Обновлен UserMiddleware для сохранения данных пользователя в контексте - Расширена функциональность register_middleware с поддержкой опционального исключения middleware - Добавлена типизация и улучшена обработка middleware
This commit is contained in:
+13
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user