From 5da236ce5dd1c5fe3e7abb583e47ba6baf3cc1ba Mon Sep 17 00:00:00 2001 From: Capybara-z Date: Thu, 2 Oct 2025 16:02:00 +0300 Subject: [PATCH] fix restore trials logic --- handlers/admin/users/users_handler.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/handlers/admin/users/users_handler.py b/handlers/admin/users/users_handler.py index 9f0cc85c..5ccb0e7e 100644 --- a/handlers/admin/users/users_handler.py +++ b/handlers/admin/users/users_handler.py @@ -1310,24 +1310,32 @@ async def confirm_restore_trials(callback_query: types.CallbackQuery): await callback_query.message.edit_text( text="⚠ Вы уверены, что хотите восстановить пробники для пользователей? \n\n" - "Только для тех, у кого нет активной подписки!", + "Только для тех, у кого нет подписок (активных или истекших)!", reply_markup=builder.as_markup(), ) @router.callback_query(AdminPanelCallback.filter(F.action == "confirm_restore_trials"), IsAdminFilter()) async def restore_trials(callback_query: types.CallbackQuery, session: AsyncSession): - active_keys_subq = select(Key.tg_id).where(Key.expiry_time > func.extract("epoch", func.now()) * 1000).subquery() - stmt = update(User).where(~User.tg_id.in_(select(active_keys_subq.c.tg_id))).where(User.trial != 0).values(trial=0) + users_result = await session.execute(select(User.tg_id).where(User.trial == 1)) + users_with_trial_used = [row[0] for row in users_result.all()] - await session.execute(stmt) - await session.commit() + users_to_reset = [] + for tg_id in users_with_trial_used: + has_keys = await session.execute(select(Key.tg_id).where(Key.tg_id == tg_id).limit(1)) + if not has_keys.scalar(): + users_to_reset.append(tg_id) + + if users_to_reset: + stmt = update(User).where(User.tg_id.in_(users_to_reset)).values(trial=0) + await session.execute(stmt) + await session.commit() builder = InlineKeyboardBuilder() builder.row(build_admin_back_btn()) await callback_query.message.edit_text( - text="✅ Пробники успешно восстановлены для пользователей без активных подписок.", + text=f"✅ Пробники восстановлены для {len(users_to_reset)} пользователей без подписок.", reply_markup=builder.as_markup(), )