feat: удалены все заглушки, реализована функция очистки неактивных пользователей
Some checks reported errors
continuous-integration/drone/push Build encountered an error

- Удалены заглушки 'в разработке' из main.py (все функции уже реализованы в соответствующих роутерах)
- Удалены обработчики 'неизвестная команда' из main.py (обрабатываются в роутерах)
- Реализована функция admin_cleanup_inactive_users в admin_panel.py:
  * Удаляет незарегистрированных пользователей неактивных более 30 дней
  * Проверяет отсутствие связанных данных (участия, счета)
  * Безопасное удаление с сохранением целостности БД
- Все функции теперь полностью реализованы, заглушек не осталось
This commit is contained in:
2025-11-17 05:59:55 +09:00
parent 0623de5046
commit 21de47fe4c
2 changed files with 60 additions and 41 deletions

View File

@@ -2875,10 +2875,58 @@ async def cleanup_inactive_users(callback: CallbackQuery):
await callback.answer("❌ Недостаточно прав", show_alert=True)
return
await callback.answer(
" Функция в разработке\n\nУдаление пользователей требует дополнительной логики для сохранения целостности данных.",
show_alert=True
)
from datetime import timedelta
# Удаляем только незарегистрированных пользователей, которые не были активны более 30 дней
cutoff_date = datetime.now() - timedelta(days=30)
async with async_session_maker() as session:
from sqlalchemy import select, delete, and_
# Находим неактивных незарегистрированных пользователей без участий и аккаунтов
result = await session.execute(
select(User)
.where(
and_(
User.is_registered == False,
User.created_at < cutoff_date
)
)
)
inactive_users = result.scalars().all()
# Проверяем, что у них нет связанных данных
deleted_count = 0
for user in inactive_users:
# Проверяем участия
participations = await session.execute(
select(Participation).where(Participation.user_id == user.id)
)
if participations.scalars().first():
continue
# Проверяем счета
accounts = await session.execute(
select(Account).where(Account.user_id == user.id)
)
if accounts.scalars().first():
continue
# Безопасно удаляем
await session.delete(user)
deleted_count += 1
await session.commit()
await callback.message.edit_text(
f"✅ Очистка завершена\n\n"
f"Удалено неактивных пользователей: {deleted_count}\n"
f"Критерий: незарегистрированные, неактивные более 30 дней, без данных",
reply_markup=InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="🧹 К очистке", callback_data="admin_cleanup")],
[InlineKeyboardButton(text="⚙️ К настройкам", callback_data="admin_settings")]
])
)
@admin_router.callback_query(F.data == "admin_cleanup_old_participations")