правки

This commit is contained in:
gy9vin
2026-01-30 23:43:26 +03:00
parent b8d0e6eefb
commit 56a69fa1ba
3 changed files with 13 additions and 17 deletions
+8 -10
View File
@@ -1024,7 +1024,6 @@ async def check_missing_bonuses(
): ):
"""Проверяет по БД — всем ли рефералам начислены бонусы.""" """Проверяет по БД — всем ли рефералам начислены бонусы."""
from app.services.referral_diagnostics_service import ( from app.services.referral_diagnostics_service import (
MissingBonusReport,
referral_diagnostics_service, referral_diagnostics_service,
) )
@@ -1057,13 +1056,13 @@ async def check_missing_bonuses(
for i, mb in enumerate(report.missing_bonuses[:15], 1): for i, mb in enumerate(report.missing_bonuses[:15], 1):
referral_name = mb.referral_full_name or mb.referral_username or str(mb.referral_telegram_id) referral_name = mb.referral_full_name or mb.referral_username or str(mb.referral_telegram_id)
referrer_name = mb.referrer_full_name or mb.referrer_username or str(mb.referrer_telegram_id) referrer_name = mb.referrer_full_name or mb.referrer_username or str(mb.referrer_telegram_id)
text += f"\n{i}. <b>{referral_name}</b>" text += f'\n{i}. <b>{referral_name}</b>'
text += f"\n └ Пригласил: {referrer_name}" text += f'\n └ Пригласил: {referrer_name}'
text += f"\n └ Пополнение: {mb.first_topup_amount_kopeks / 100:.0f}" text += f'\n └ Пополнение: {mb.first_topup_amount_kopeks / 100:.0f}'
text += f"\n └ Бонусы: {mb.referral_bonus_amount / 100:.0f}₽ + {mb.referrer_bonus_amount / 100:.0f}" text += f'\n └ Бонусы: {mb.referral_bonus_amount / 100:.0f}₽ + {mb.referrer_bonus_amount / 100:.0f}'
if len(report.missing_bonuses) > 15: if len(report.missing_bonuses) > 15:
text += f"\n\n<i>... и ещё {len(report.missing_bonuses) - 15} чел.</i>" text += f'\n\n<i>... и ещё {len(report.missing_bonuses) - 15} чел.</i>'
keyboard = types.InlineKeyboardMarkup( keyboard = types.InlineKeyboardMarkup(
inline_keyboard=[ inline_keyboard=[
@@ -1095,7 +1094,6 @@ async def apply_missing_bonuses(
): ):
"""Применяет начисление пропущенных бонусов.""" """Применяет начисление пропущенных бонусов."""
from app.services.referral_diagnostics_service import ( from app.services.referral_diagnostics_service import (
MissingBonus,
MissingBonusReport, MissingBonusReport,
referral_diagnostics_service, referral_diagnostics_service,
) )
@@ -1200,7 +1198,7 @@ async def sync_referrals_with_contest(
total_skipped += stats.get('skipped', 0) total_skipped += stats.get('skipped', 0)
contest_results.append(f"{contest.title}: +{stats.get('created', 0)} новых") contest_results.append(f"{contest.title}: +{stats.get('created', 0)} новых")
else: else:
contest_results.append(f"{contest.title}: ошибка") contest_results.append(f'{contest.title}: ошибка')
text = f""" text = f"""
🏆 <b>Синхронизация с конкурсами завершена!</b> 🏆 <b>Синхронизация с конкурсами завершена!</b>
@@ -1420,7 +1418,7 @@ async def receive_log_file(message: types.Message, db_user: User, db: AsyncSessi
await status_message.edit_text( await status_message.edit_text(
f'❌ <b>Ошибка при анализе файла</b>\n\n' f'❌ <b>Ошибка при анализе файла</b>\n\n'
f'Файл: {file_name}\n' f'Файл: {file_name}\n'
f'Ошибка: {str(e)}\n\n' f'Ошибка: {e!s}\n\n'
f'Проверьте, что файл является текстовым логом бота.', f'Проверьте, что файл является текстовым логом бота.',
reply_markup=types.InlineKeyboardMarkup( reply_markup=types.InlineKeyboardMarkup(
inline_keyboard=[ inline_keyboard=[
@@ -1431,7 +1429,7 @@ async def receive_log_file(message: types.Message, db_user: User, db: AsyncSessi
) )
except: except:
await message.answer( await message.answer(
f'❌ Ошибка при анализе файла: {str(e)}', f'❌ Ошибка при анализе файла: {e!s}',
reply_markup=types.InlineKeyboardMarkup( reply_markup=types.InlineKeyboardMarkup(
inline_keyboard=[ inline_keyboard=[
[types.InlineKeyboardButton(text='⬅️ Назад', callback_data='admin_referral_diagnostics')] [types.InlineKeyboardButton(text='⬅️ Назад', callback_data='admin_referral_diagnostics')]
+1 -1
View File
@@ -459,7 +459,7 @@ class ReferralDiagnosticsService:
date_prefix = start_date.strftime('%Y-%m-%d') if use_date_prefix else None date_prefix = start_date.strftime('%Y-%m-%d') if use_date_prefix else None
try: try:
with open(self.log_path, 'r', encoding='utf-8', errors='ignore') as f: with open(self.log_path, encoding='utf-8', errors='ignore') as f:
for line in f: for line in f:
total_lines += 1 total_lines += 1
line = line.strip() line = line.strip()
+4 -6
View File
@@ -7,9 +7,7 @@ from datetime import datetime, timedelta
from pathlib import Path from pathlib import Path
import pytest import pytest
from sqlalchemy.ext.asyncio import AsyncSession
from app.database.models import User
from app.services.referral_diagnostics_service import ReferralDiagnosticsService from app.services.referral_diagnostics_service import ReferralDiagnosticsService
@@ -55,7 +53,7 @@ async def test_parse_logs_basic(temp_log_file, sample_log_content):
events = await service._parse_logs(today, tomorrow) events = await service._parse_logs(today, tomorrow)
# Проверяем что нашлись все события # Проверяем что нашлись все события
assert len(events) >= 6, f"Expected at least 6 events, found {len(events)}" assert len(events) >= 6, f'Expected at least 6 events, found {len(events)}'
# Проверяем типы событий # Проверяем типы событий
event_types = [e.event_type for e in events] event_types = [e.event_type for e in events]
@@ -85,18 +83,18 @@ async def test_analyze_period_with_issues(temp_log_file, sample_log_content):
# Проверяем статистику # Проверяем статистику
# Примечание: code_found не имеет telegram_id, поэтому total_link_clicks будет 0 # Примечание: code_found не имеет telegram_id, поэтому total_link_clicks будет 0
# Это нормально - мы считаем только события с telegram_id # Это нормально - мы считаем только события с telegram_id
assert report.total_codes_applied >= 1, "Should have applied codes" assert report.total_codes_applied >= 1, 'Should have applied codes'
# Проверяем что нашлись проблемные случаи # Проверяем что нашлись проблемные случаи
# (987654321 применил код, но не завершил регистрацию) # (987654321 применил код, но не завершил регистрацию)
assert 987654321 in report.users_applied_no_registration, \ assert 987654321 in report.users_applied_no_registration, \
f"Expected 987654321 in problems, got: {report.users_applied_no_registration}" f'Expected 987654321 in problems, got: {report.users_applied_no_registration}'
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_empty_log_file(temp_log_file): async def test_empty_log_file(temp_log_file):
"""Тест работы с пустым лог-файлом.""" """Тест работы с пустым лог-файлом."""
temp_log_file.write_text("") temp_log_file.write_text('')
service = ReferralDiagnosticsService(log_path=str(temp_log_file)) service = ReferralDiagnosticsService(log_path=str(temp_log_file))