From a37582dcb0e2a4707de179917577257fdffeceec Mon Sep 17 00:00:00 2001 From: Vladless Date: Tue, 22 Apr 2025 19:21:15 +0300 Subject: [PATCH] update user middleware --- database.py | 21 +++++++++++++++++---- middlewares/user.py | 1 + 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/database.py b/database.py index a3cca13a..9c0531dc 100644 --- a/database.py +++ b/database.py @@ -821,7 +821,8 @@ async def upsert_user( language_code: str = None, is_bot: bool = False, session: Any = None, -) -> dict: + only_if_exists: bool = False, +) -> dict | None: """ Обновляет или вставляет информацию о пользователе в базу данных. """ @@ -835,7 +836,15 @@ async def upsert_user( else: conn = await asyncpg.connect(DATABASE_URL) close_conn = True - logger.info(f"Установлено новое подключение к базе данных для обновления пользователя {tg_id}") + logger.info(f"Установлено новое подключение к БД для пользователя {tg_id}") + + if only_if_exists: + logger.debug(f"[upsert_user] Режим only_if_exists: проверяю наличие пользователя {tg_id}") + user_data = await conn.fetchrow( + "SELECT tg_id, username, first_name, last_name, language_code, is_bot, created_at, updated_at FROM users WHERE tg_id = $1", + tg_id, + ) + return dict(user_data) if user_data else None user_data = await conn.fetchrow( """ @@ -1048,11 +1057,15 @@ async def get_servers(session: Any = None, include_enabled: bool = False): async def delete_user_data(session: Any, tg_id: int): + await session.execute("DELETE FROM notifications WHERE tg_id = $1", tg_id) await session.execute("DELETE FROM gifts WHERE sender_tg_id = $1 OR recipient_tg_id = $1", tg_id) await session.execute("DELETE FROM payments WHERE tg_id = $1", tg_id) - await session.execute("DELETE FROM users WHERE tg_id = $1", tg_id) + await session.execute("DELETE FROM referrals WHERE referrer_tg_id = $1 OR referred_tg_id = $1", tg_id) + await session.execute("DELETE FROM coupon_usages WHERE user_id = $1", tg_id) await delete_key(tg_id, session) - await session.execute("DELETE FROM referrals WHERE referrer_tg_id = $1", tg_id) + await session.execute("DELETE FROM temporary_data WHERE tg_id = $1", tg_id) + await session.execute("DELETE FROM blocked_users WHERE tg_id = $1", tg_id) + await session.execute("DELETE FROM users WHERE tg_id = $1", tg_id) async def store_gift_link( diff --git a/middlewares/user.py b/middlewares/user.py index 07ba44c2..d0cf85ae 100644 --- a/middlewares/user.py +++ b/middlewares/user.py @@ -51,6 +51,7 @@ class UserMiddleware(BaseMiddleware): language_code=user.language_code, is_bot=user.is_bot, session=session, + only_if_exists=True, ) logger.debug(f"Получены данные пользователя из БД: {user.id}")