Commit Graph

5865 Commits

Author SHA1 Message Date
Egor 5e6baac07e Add files via upload 2025-12-25 21:05:49 +03:00
Egor 42b06ea8bc Add files via upload 2025-12-25 21:05:10 +03:00
Egor 07ded3710c Add files via upload 2025-12-25 21:04:10 +03:00
Egor 7d0977066b Add files via upload 2025-12-25 21:03:14 +03:00
Egor d8e57ab766 Add files via upload 2025-12-25 21:01:58 +03:00
Egor 83cb1ec823 Add files via upload 2025-12-25 21:01:11 +03:00
gy9vin da46e39c61 refactor(modem): рефакторинг модуля управления модемом
Рефакторинг архитектуры управления модемом:

- Создан сервис app/services/modem_service.py:
  - ModemService с бизнес-логикой подключения/отключения
  - ModemError enum для типизации ошибок
  - ModemPriceInfo, ModemOperationResult dataclass'ы
  - Константы MODEM_WARNING_DAYS_* для уровней предупреждений
2025-12-25 18:44:27 +03:00
gy9vin 86dd18fbe7 refactor(contests): доработка ежедневных конкурсов
Рефакторинг архитектуры ежедневных конкурсов:

- Создан модуль app/services/contests/ с новой архитектурой:
  - enums.py: GameType, RoundStatus, PrizeType enum классы
  - games.py: паттерн Стратегия для 7 типов игр
  - attempt_service.py: ContestAttemptService для атомарных операций

- Упрощён handlers/contests.py:
  - Удалены отдельные _render_* функции (заменены на стратегии)
  - Логика обработки попыток вынесена в ContestAttemptService
  - Уменьшено с 523 до 342 строк (-35%)

- Обновлён contest_rotation_service.py:
  - Заменена if-elif цепочка на get_game_strategy().build_payload()
  - Используются enum классы вместо магических строк

- Исправлен handlers/admin/daily_contests.py:
  - prize_days → prize_type/prize_value (соответствие модели БД)
  - Обновлены EDITABLE_FIELDS и отображение приза

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 18:09:11 +03:00
gy9vin 21f34a9b08 fix(contests): блокировка повторных ответов в текстовых играх
- Создание попытки сразу при показе вопроса (cipher/emoji/anagram)
- Проверка attempt.answer is not None для блокировки повторного ответа
- Обновление существующей попытки вместо создания новой
- Добавлена функция update_attempt() в CRUD
2025-12-25 15:00:30 +03:00
gy9vin 0538d0e337 feat(traffic): улучшение системы докупки и сброса трафика
- Добавлен ENV переключатель TRAFFIC_TOPUP_ENABLED для вкл/выкл докупки
- Добавлена отдельная конфигурация пакетов TRAFFIC_TOPUP_PACKAGES_CONFIG
- Добавлено поле purchased_traffic_gb для отслеживания докупленного трафика
- Добавлены режимы расчета цены сброса (period/traffic/traffic_with_purchased)
- Исправлен абьюз: цена сброса теперь учитывает докупленный трафик
- Сброс purchased_traffic_gb при продлении/покупке подписки
- UX: меню сброса теперь показывает цену и баланс вместо alert
- UX: кнопка пополнения если не хватает средств на сброс
- Добавлена миграция для нового поля purchased_traffic_gb
- Добавлена локализация TRAFFIC_TOPUP_DISABLED (ru/en/ua/zh)
2025-12-25 14:48:24 +03:00
Mikhail 1e64b65586 Merge branch 'BEDOLAGA-DEV:main' into main 2025-12-25 14:26:35 +03:00
gy9vin 90c3df6331 Добавлен функционал подключения модема к подписке
Изменения:
- Добавлены настройки модема в .env.example и config.py (MODEM_ENABLED, MODEM_PRICE_PER_MONTH, MODEM_PERIOD_DISCOUNTS)
- Добавлено поле modem_enabled в модель Subscription
- Реализован модуль handlers/subscription/modem.py с обработчиками подключения/отключения модема
- Добавлено управ
2025-12-25 14:26:15 +03:00
Egor b9ea5a80ac Merge pull request #2212 from BEDOLAGA-DEV/dev5
Update subscription_service.py
2025-12-25 11:00:00 +03:00
Egor 40d6514dee Update subscription_service.py 2025-12-25 10:59:35 +03:00
Egor 4a2b254d99 Merge pull request #2211 from BEDOLAGA-DEV/dev5
Dev5
2025-12-25 09:45:07 +03:00
Egor 6c740ad984 Update purchase.py 2025-12-25 09:35:49 +03:00
Egor 929a8d5fa9 Update purchase.py 2025-12-25 09:09:46 +03:00
Egor b0bf5131d4 Update subscription_service.py 2025-12-25 09:09:12 +03:00
Egor ef8d9fe1ff Update subscription_purchase_service.py 2025-12-24 23:15:37 +03:00
Egor d57e0743a1 Update tickets.py 2025-12-24 23:06:22 +03:00
Egor 664cbff1ce Update tickets.py 2025-12-24 23:05:52 +03:00
Egor 6ea52bf406 Update messages.py 2025-12-24 22:46:04 +03:00
Mikhail 0ddf24125b Merge branch 'BEDOLAGA-DEV:main' into main 2025-12-24 16:17:29 +03:00
Egor f5a533e407 Merge pull request #2210 from BEDOLAGA-DEV/dev5
Dev5
2025-12-24 15:30:46 +03:00
Egor dd87b4d408 Update database.py 2025-12-24 14:44:02 +03:00
Egor 2c6c7056e8 Update subscriptions.py 2025-12-24 11:16:00 +03:00
Egor 8a10b96fef Update users.py 2025-12-24 11:15:40 +03:00
Egor c0a85bad84 Merge pull request #2209 from BEDOLAGA-DEV/dev5
Dev5
2025-12-23 22:09:46 +03:00
Egor fbfc00586c Update purchase.py 2025-12-23 21:03:13 +03:00
Egor 5723c3b379 Update purchase.py 2025-12-23 20:37:01 +03:00
Egor f1be66d1a5 Update inline.py 2025-12-23 20:35:42 +03:00
gy9vin b3cdd3c03a Расширение функционала конкурсов: разнообразие наград, напоминания, многоязычность
Изменения:
- ContestTemplate: prize_days заменен на prize_type и prize_value для поддержки разных типов наград (days, balance, custom)
- _award_prize: обновлена логика выдачи призов для всех типов наград
- DEFAULT_TEMPLATES: обновлены для использования prize_type/prize_value
- upsert_template: обновлена сигнатура для новых полей
- _announce_round_start: добавлена локализация и напоминания о конкурсах
- handle_text_answer: исправлена гонка условий с атомарным инкрементом победителей
- Локализация: добавлены ключи CONTEST_START_ANNOUNCEMENT, CONTEST_PRIZE, DAYS, CONTEST_WINNERS, CONTEST_ATTEMPTS, CONTEST_ELIGIBILITY, REMINDER, CONTEST_REMINDER_TEXT в ru.json и en.json
- API схемы: обновлены ContestTemplateResponse и ContestTemplateUpdateRequest

Требуется миграция БД для новых колонок prize_type и prize_value.
2025-12-23 19:15:40 +03:00
gy9vin 01afce002a Исправление уязвимостей и багов в конкурсах
- Добавлена защита от спама: rate limiting для попыток (1 попытка/3-5 сек)
- Усилена валидация входных данных: функция _validate_callback_data для безопасного парсинга callback.data
- Перепроверка авторизации: статус подписки проверяется на каждом шаге
- Атомарные операции победителей: использование select with_for_update для предотвращения гонок условий
- Улучшено логирование: добавлены логи попыток и побед для аудита
- Добавлена кнопка 'Назад' в игру 'Блиц' для предотвращения застревания пользователей
- Исправлены отступы и ошибки линтера в _render_blitz

Все изменения направлены на повышение безопасности, стабильности и UX конкурсов.
2025-12-23 18:59:44 +03:00
Egor 63a9c1afd1 Update inline.py 2025-12-23 16:09:58 +03:00
Egor 0c9f667cd8 Merge pull request #2207 from BEDOLAGA-DEV/dev5
Dev5
2025-12-23 11:57:02 +03:00
Egor dc428baa6a Update subscription.py 2025-12-23 11:53:52 +03:00
Egor f65aa6a82d Update remnawave_service.py 2025-12-23 11:53:11 +03:00
Egor c986b127a7 Merge pull request #2206 from BEDOLAGA-DEV/dev5
w
2025-12-23 11:29:16 +03:00
Egor 94a7a5fce8 Update remnawave_service.py 2025-12-23 11:28:37 +03:00
Egor f07bbe0fd0 Update remnawave_api.py 2025-12-23 11:27:57 +03:00
Egor 46f61dbc57 Update config.py 2025-12-23 11:27:33 +03:00
Egor 41502cadcd Merge pull request #2205 from BEDOLAGA-DEV/dev5
Update remnawave_api.py
2025-12-23 11:18:46 +03:00
Egor aa5e6841f8 Update remnawave_api.py 2025-12-23 11:18:22 +03:00
Egor 8a98a7ee84 Merge pull request #2204 from BEDOLAGA-DEV/dev5
Update config.py
2025-12-23 11:09:26 +03:00
Egor e1d6c73557 Update config.py 2025-12-23 11:08:50 +03:00
Egor b4d66bd34d Merge pull request #2203 from BEDOLAGA-DEV/dev5
Update photo_message.py
2025-12-23 02:19:18 +03:00
Egor 1496ec901d Update photo_message.py 2025-12-23 02:17:31 +03:00
Egor 78ce6bd428 Merge pull request #2202 from BEDOLAGA-DEV/dev5
Update remnawave_service.py
2025-12-23 00:54:44 +03:00
Egor 9ec52dcf95 Update remnawave_service.py 2025-12-23 00:54:01 +03:00
Egor 80a13e6b71 Merge pull request #2201 from BEDOLAGA-DEV/dev5
fix
2025-12-22 22:46:27 +03:00