What's Changed
- Dev by @Fr1ngg in #20
Full Changelog: v2.1.7...v2.1.8
🚀 Обновление системы управления пакетами трафика
✨ Новые функции
Динамическая система пакетов трафика:
- Добавлена поддержка конфигурации пакетов трафика через переменную окружения
TRAFFIC_PACKAGES_CONFIG - Формат конфигурации:
GB:PRICE_KOPEKS:ENABLED(например:5:10000:true,10:20000:true,0:500000:true)
Логика продления подписок:
- Исправлен расчет стоимости трафика при продлении (использовался устаревший словарь
TRAFFIC_PRICES)
Умная обработка пакетов:
- Добавлен алгоритм поиска подходящего пакета при отсутствии точного совпадения
- Если трафик превышает максимальный пакет, автоматически применяется безлимитный тариф
📝 Изменения в коде
Файлы изменены:
app/config.py- улучшена функцияget_traffic_price()с поддержкой интеллектуального поиска пакетовapp/keyboards/inline.py- исправлены функцииget_traffic_packages_keyboard()иget_add_traffic_keyboard()app/services/subscription_service.py- обновлены функции расчета стоимости с использованием новой системы цен
Новые функции:
_determine_original_traffic_package()- определение исходного пакета трафика на основе текущих лимитов
⚡ Производительность
- Кэширование конфигурации пакетов трафика
- Оптимизированный поиск подходящих тарифных планов
- Уменьшено количество обращений к базе данных при расчете цен
🔒 Обратная совместимость
- Сохранена поддержка старых статических цен как fallback
- Существующие подписки автоматически адаптируются к новой системе
- Миграция данных происходит прозрачно для пользователей
ОБЯЗАТЕЛЬНО ОБНОВИТЕ КОНФИГУРАЦИЮ ENV УДАЛИВ ЦЕНЫ СТАРОГО ФОРМАТА (PRICE_TRAFFIC_5GB= и тд)
Пример новой конфигурации:
TRAFFIC_PACKAGES_CONFIG="5:2000:false,10:3500:false,25:7000:false,50:11000:true,100:15000:true,250:17000:false,500:19000:false,1000:19500:true,0:20000:true""Эта система делает управление тарифами значительно более гибким
📱 Обновление системы управления устройствами
Что исправлено:
- Убран хардкод лимита на 10 устройств - теперь лимит настраивается через переменную окружения
- Улучшен интерфейс выбора устройств - кнопки теперь располагаются в два столбца для экономии места
- Сокращены тексты - убрано слово "устройства" из кнопок для более компактного отображения
Новые возможности:
- Настраиваемый лимит устройств через
MAX_DEVICES_LIMITв ENV файле - Гибкая конфигурация: установите
0для снятия лимита или любое число для установки максимума - Улучшенная валидация - проверка лимитов на всех этапах покупки и добавления устройств
Технические изменения:
- Добавлена переменная
MAX_DEVICES_LIMITв конфигурацию - Обновлены функции
get_devices_keyboard()иget_add_devices_keyboard() - Добавлены проверки лимитов в
calculate_subscription_price()иconfirm_add_devices() - Улучшен UX с компактным двухколоночным отображением кнопок
Настройка:
Добавьте в ваш .env файл:
# Максимальное количество устройств (0 = без лимита)
MAX_DEVICES_LIMIT=50Совместимость:
- Полностью обратно совместимо с существующими подписками
- По умолчанию установлен разумный лимит в 50 устройств
- Старые подписки продолжат работать без изменений
🔧 Исправление удаления пользователей через админку
Исправлена критическая ошибка
Проблема
При удалении пользователя через админ-панель возникала ошибка:
sqlalchemy.dialects.postgresql.asyncpg.Error: Key (id)=(1) is still referenced from table "yookassa_payments"
Причина
Неправильный порядок удаления связанных записей в базе данных. YooKassa платежи ссылались на транзакции через transaction_id, но транзакции удалялись раньше платежей, что вызывало нарушение внешнего ключа.
Что исправлено
📁 app/services/user_service.py
- Переписана функция
delete_user_account()с правильным порядком удаления - Добавлены недостающие импорты:
YooKassaPayment,BroadcastHistory,select,update - Улучшено логирование процесса удаления для отладки
Правильный порядок удаления:
- Деактивация в RemnaWave
- YooKassa платежи (первым делом!)
- Транзакции пользователя
- Использования промокодов
- Реферальные доходы
- История рассылок
- Подключенные серверы подписки
- Подписка
- Очистка реферальных ссылок
- Удаление самого пользователя
Дополнительные улучшения:
- Добавлена обработка исключений для каждого этапа удаления
- Улучшена информативность логов
- Добавлена защита от частичного удаления при ошибках
Результат
✅ Удаление пользователей через админку теперь работает без ошибок
✅ Все связанные данные корректно удаляются в правильном порядке
✅ Улучшена стабильность админ-панели
Файлы изменены
app/services/user_service.py- исправлена логика удаления пользователей