v1.35 КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ ВЕРИФИКАЦИИ

🐛 ПРОБЛЕМА:
• Жильцы писали номер квартиры — он НЕ СОХРАНЯЛСЯ
• 11 человек верифицированы БЕЗ квартиры!
• Авто-верификация верифицировала без проверки квартиры

🔧 ИСПРАВЛЕНИЯ:

1️⃣ web/app.py — auto_verify:
• Теперь верифицирует ТОЛЬКО с квартирой
• Проверка: apartment != None AND apartment != ''

2️⃣ handlers/verification.py — process_verification:
• Если верифицирован БЕЗ квартиры → СОХРАНЯЕТ!
• Если верифицирован С квартирой → сообщение
• Для неверифицированных → как раньше

 РЕЗУЛЬТАТ:
• Жильцы смогут добавить квартиру постфактум
• Авто-верификация не сломает данные
• 11 человек смогут восстановить квартиры

📝 ФАЙЛЫ:
• web/app.py: auto_verify fix
• handlers/verification.py: apartment save fix

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
Admin 2026-03-17 18:24:59 +04:00
parent 75a17a3de5
commit 1e61eca60c
2 changed files with 37 additions and 14 deletions

View file

@ -197,16 +197,33 @@ async def process_verification(message: Message, apartment: str):
session.add(user) session.add(user)
else: else:
logger.info(f'Пользователь найден: verified={user.verified}, apartment={user.apartment}') logger.info(f'Пользователь найден: verified={user.verified}, apartment={user.apartment}')
# Если уже верифицирован # Если уже верифицирован
if user.verified: if user.verified:
await message.answer( # Но квартиры нет — сохраняем!
f'✅ Вы уже верифицированы (кв. {user.apartment})\n\n' if not user.apartment:
'Если нужно изменить квартиру, обратитесь к администратору.', user.apartment = apartment_upper
parse_mode='HTML' await session.commit()
) logger.info(f'Сохранена квартира для верифицированного: {apartment_upper}')
return
await message.answer(
# Обновляем квартиру f'✅ <b>Квартира сохранена!</b>\n\n'
f'Квартира: <code>{apartment_upper}</code>\n\n'
f'Вы уже были верифицированы.\n'
f'Теперь ваша квартира привязана к аккаунту!',
parse_mode='HTML'
)
return
else:
# Уже есть квартира
await message.answer(
f'✅ Вы уже верифицированы (кв. {user.apartment})\n\n'
'Если нужно изменить квартиру, обратитесь к администратору.',
parse_mode='HTML'
)
return
# Обновляем квартиру для неверифицированных
user.apartment = apartment_upper user.apartment = apartment_upper
# Создаём заявку на верификацию (если ещё нет активной) # Создаём заявку на верификацию (если ещё нет активной)

View file

@ -158,13 +158,19 @@ async def users_page(request: Request, search: str = "", filter: str = "", usern
@app.post("/api/users/auto_verify") @app.post("/api/users/auto_verify")
async def api_auto_verify_users(username: str = Depends(get_current_admin)): async def api_auto_verify_users(username: str = Depends(get_current_admin)):
"""Автоверификация активных пользователей""" """Автоверификация активных пользователей (ТОЛЬКО с квартирой!)"""
async with AsyncSessionLocal() as session: async with AsyncSessionLocal() as session:
# Находим активных (50+ сообщений) которые не верифицированы # Находим активных (50+ сообщений) которые не верифицированы
stmt = select(User).where(User.verified == False, User.message_count >= 50) # И у которых УЖЕ ЕСТЬ квартира!
stmt = select(User).where(
User.verified == False,
User.message_count >= 50,
User.apartment != None,
User.apartment != ''
)
result = await session.execute(stmt) result = await session.execute(stmt)
active_users = list(result.scalars().all()) active_users = list(result.scalars().all())
# Верифицируем всех # Верифицируем всех
verified_count = 0 verified_count = 0
for user in active_users: for user in active_users:
@ -172,10 +178,10 @@ async def api_auto_verify_users(username: str = Depends(get_current_admin)):
if not user.verification_date: if not user.verification_date:
user.verification_date = datetime.utcnow() user.verification_date = datetime.utcnow()
verified_count += 1 verified_count += 1
await session.commit() await session.commit()
return JSONResponse({"success": True, "message": f"Верифицировано {verified_count} активных пользователей"}) return JSONResponse({"success": True, "message": f"Верифицировано {verified_count} активных пользователей с квартирой"})
@app.post("/api/user/{user_id}/update") @app.post("/api/user/{user_id}/update")