Fringg
b9b695799c
refactor: remove unused EXTERNAL_ADMIN_TOKEN functionality
...
- Delete app/services/external_admin_service.py entirely
- Remove EXTERNAL_ADMIN_TOKEN and EXTERNAL_ADMIN_TOKEN_BOT_ID from config
- Remove build_external_admin_token, get_external_admin_token, get_external_admin_bot_id methods
- Remove unused hashlib/hmac imports from config.py
- Remove from system_settings_service: READ_ONLY_KEYS, PLAIN_TEXT_KEYS,
category title, category description, prefix mapping, documentation metadata
- Remove from bot_configuration.py category group
- Remove from main.py startup sequence (ensure_external_admin_token call)
- Remove from .env.example
- Remove from docs/project_structure_reference.md
2026-04-26 19:54:33 +03:00
Egor
d97c8531a3
Delete docs/multi-tariff-review.md
2026-03-26 11:23:48 +03:00
Fringg
6dc5879ffa
docs: add Stage 3+4 audit results to multi-tariff review
2026-03-26 08:39:45 +03:00
Fringg
40d2ec6718
docs: update multi-tariff review with Stage 2 full audit results
...
Stage 2 covered ~60 files across 6 parallel agents:
- Bot handlers (purchase, traffic, devices, links, start, menu, etc.)
- Core services (subscription, auto-purchase, daily, remnawave, guest, campaign)
- Admin handlers + cabinet modules
- CRUD functions + utilities
- Frontend cabinet (React/TypeScript)
- Remaining services (renewal, broadcast, blocked, yookassa, backup)
Found: 5 CRITICAL, 18 HIGH, 18 MEDIUM, 10 LOW issues
Confirmed correct: 15 components
2026-03-26 07:36:31 +03:00
Fringg
5724906517
fix: multi-tariff code review — 13 critical/high bugs fixed across 14 files
...
CRITICAL fixes:
- promocode_service: NameError (subscription_id not passed), TypeError (dict
returns), savepoint without commit, dead else branch
- cabinet status/autopay/renewal: resolve_subscription() instead of
user.subscription fallback in multi-tariff mode
- cabinet devices: MultipleResultsFound crash on 3 POST endpoints
- webhook service: IDOR returning cross-user subscription
- monitoring_service: real expiring notification keyboard with se:{sub_id}
HIGH fixes:
- subscription_purchase_service: FOR UPDATE on both branches of submit_purchase
- miniapp: 8 endpoints now pass subscription_id to _ensure_paid_subscription
- inline.py: se:{subscription_id} callback for expiring keyboard
- tariff_purchase: TransactionType.FAILED_REFUND + _persist_failed_refund()
- account_merge_service: panel sync after subscription transfer
- webhook service: .limit(1) on fallback queries to prevent MultipleResultsFound
2026-03-26 07:26:53 +03:00
Fringg
8d3cd50098
refactor: централизация всех расчётов цен в PricingEngine
...
- Мигрирован confirm_purchase() на calculate_classic_new_subscription_price()
- Мигрирован compute_simple_subscription_price на делегацию в PricingEngine
- Мигрирован handle_custom_confirm на calculate_tariff_purchase_price()
- Мигрированы daily confirm handlers (confirm_daily_tariff_purchase,
confirm_daily_tariff_switch, confirm_instant_switch daily path)
- Мигрирован gift.py на calculate_tariff_purchase_price()
- Мигрированы FSM cache prices (select_period, select_devices, toggle_country)
- Добавлен lock_user_for_pricing в admin_buy_tariff_execute (TOCTOU fix)
- Добавлен lock + recompute в _auto_add_devices и _auto_add_traffic
- Исправлено двойное применение promo-offer в simple_subscription (критический баг)
- Унифицирован daily price display (group+offer) на всех 6 поверхностях
- PricingEngine.get_addon_discount_percent: добавлен promo_group= kwarg
- PricingEngine._calculate_switch_to/from_daily: добавлен promo-offer discount
- Удалён мёртвый код из common.py (_get_addon_discount_percent_for_user)
- Miniapp period_discounts: исправлен доступ через get_discount_percent()
2026-03-16 03:10:22 +03:00
Egor
995d66483b
Delete docs/plans directory
2026-03-13 05:57:37 +03:00
Fringg
f59b215645
style: fix import sorting and formatting after lint
...
ruff auto-fix for import ordering in cabinet/subscription.py and
formatting adjustments across changed files.
2026-03-12 22:58:35 +03:00
Fringg
784616b349
refactor: replace universal_migration.py with Alembic
...
Remove the 7,791-line universal_migration.py and 16 incomplete individual
Alembic migrations. Replace with a single initial schema migration using
Base.metadata.create_all(checkfirst=True).
Changes:
- Add programmatic Alembic runner (app/database/migrations.py) with
auto-stamp logic for existing databases transitioning from
universal_migration
- Extract ensure_default_web_api_token() to web_api_token_service.py
- Extract sync_postgres_sequences() to database.py with SQL injection
prevention via _quote_ident()
- Add HMAC token hashing support with backward-compatible dual-hash
fallback and automatic rehashing
- Remove dead init_db() function and unused imports
- Add Makefile targets: migrate, migration, migrate-stamp, migrate-history
- Fix fileConfig() destroying structlog config (disable_existing_loggers)
- Remove duplicate migrations/alembic/alembic.ini with credentials
- Add script.py.mako template for future migration generation
- Update startup flow: alembic upgrade → sync sequences → ensure token
- Harden database.py: ParamSpec for retry decorator, safe URL logging,
echo='debug' mode, execute_with_retry validation
- Update documentation references
31 files changed, 302 insertions(+), 9,226 deletions(-)
2026-02-18 08:10:20 +03:00
Fringg
ad87c5fb5e
feat: rename MAIN_MENU_MODE=text to cabinet with deep-linking to frontend sections
...
- Rename mode from 'text' to 'cabinet' (text/text_only/minimal kept as aliases)
- Add build_cabinet_url() for joining MINIAPP_CUSTOM_URL with section paths
- Cabinet main menu now has section-specific buttons: subscription, balance,
referral, support, info — each opens the corresponding cabinet page
- Add CALLBACK_TO_CABINET_PATH mapping for automatic deep-linking from
callback_data to cabinet routes (/subscription, /balance, /referral, etc.)
- Unmapped callback_data gracefully falls back to regular Telegram callbacks
- Add startup validation warning when cabinet mode is active without MINIAPP_CUSTOM_URL
- Update admin broadcast buttons with section-specific routing
- Backward compatible: is_text_main_menu_mode() kept as alias for is_cabinet_mode()
2026-02-12 22:21:08 +03:00
Fringg
119f463c36
refactor: remove Flask, use FastAPI exclusively for all webhooks
...
Delete dead Flask-based PAL24 webhook server (app/external/pal24_webhook.py).
PAL24 webhooks already handled by unified FastAPI server on port 8080.
- Remove flask dependency from pyproject.toml and requirements.txt
- Remove PAL24_WEBHOOK_PORT config (unused, FastAPI uses shared port)
- Remove pal24_webhook module reference from log filter
- Update docs: webhook example rewritten from Flask to FastAPI
- Uninstall flask, werkzeug, blinker, itsdangerous
2026-02-09 21:54:15 +03:00
gy9vin
78d785f83f
fix(contests): исправлены критические баги системы конкурсов
...
- Исправлен вызов get_active_rounds в админ-панели (передавалось 2 параметра вместо 1)
- Обновлены кнопки редактирования призов с prize_days на prize_type/prize_value
- Мигрирован Cabinet API с устаревшего prize_days на новые поля
- Добавлена поддержка нескольких типов призов (дни, баланс, кастом)
- Обновлена документация API конкурсов
2026-01-18 10:15:45 +03:00
Egor
75b1fff791
Delete docs/web-api-analysis-and-suggestions.md
2026-01-08 04:55:31 +03:00
PEDZEO
6b69ec750e
feat: add cabinet (personal account) backend API
...
- Add JWT authentication for cabinet users
- Add Telegram WebApp authentication
- Add subscription management endpoints
- Add balance and transactions endpoints
- Add referral system endpoints
- Add tickets support for cabinet
- Add webhooks and websocket for real-time updates
- Add email verification service
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-01 23:20:20 +03:00
PEDZEO
0cd355a878
Merge pull request #2175 from BEDOLAGA-DEV/buttons
...
Buttons
2025-12-21 05:02:45 +03:00
Egor
344ff65710
Merge pull request #2173 from Gy9vin/main
...
Юкасса сдк обновление
2025-12-21 04:52:41 +03:00
gy9vin
837473b274
Апи для детальной статистики по конкурсу рефералов
2025-12-21 00:38:08 +03:00
PEDZEO
d75fc0c60f
Add statistics endpoints in MenuLayoutService for button clicks, including by type, hour, weekday, top users, period comparison, and user click sequences
2025-12-20 03:32:34 +03:00
PEDZEO
dd24b7ffde
Add ButtonStatsMiddleware for automatic button click logging in bot setup
2025-12-20 02:42:40 +03:00
gy9vin
2f0594e361
Конкурсная система.
2025-12-15 20:04:39 +03:00
gy9vin
afd4fe8d1d
Конкурсы +АПИ
2025-12-14 14:37:29 +03:00
Egor
479b9bc384
Add telegram id support for promo offers
2025-12-05 09:56:03 +03:00
Egor
68c125ba14
feat: expose integration metadata for miniapp payments
2025-11-11 08:11:42 +03:00
Egor
f2b724a78d
Adjust Pal24 callback handling and SBP link fallback
2025-11-10 05:26:02 +03:00
gy9vin
cfdc829f48
update
2025-11-07 22:24:43 +03:00
Egor
9fe7d0592f
Expose unified health status alongside admin API
2025-11-06 18:02:08 +03:00
Egor
ed46b7c919
Update miniapp-setup.md
2025-10-24 13:23:23 +03:00
Egor
30ec07f7fe
Avoid loading poll responses in list endpoint
2025-10-24 09:39:39 +03:00
Egor
fa3ed3af81
Add system log endpoints to admin API
2025-10-24 09:20:34 +03:00
Egor
5f316f85b3
feat: expose monitoring logs through web api
2025-10-24 09:06:08 +03:00
Egor
49ace78a68
Polish Heleket payment integration
2025-10-21 11:12:47 +03:00
Egor
0e43daf48b
Fix autopay day button label
2025-10-21 09:10:26 +03:00
gy9vin
58588e37d0
Реализация корзины пользователя! запоминает настройки подписки после пополнения баланса.
2025-10-14 09:02:16 +03:00
gy9vin
a320de1cbb
Скрытие кнопки партнерки через env
2025-10-13 23:00:06 +03:00
Egor
d082e8a61c
Refactor subscription handlers into modular package
2025-10-13 21:21:26 +03:00
gy9vin
dec3aefdec
Модульная структура платежки
2025-10-12 16:14:00 +03:00
Egor
a2cb7527f8
feat(api): add promo offers endpoints and docs
2025-10-06 04:27:21 +03:00
Egor
7f4af89d60
Update miniapp-setup.md
2025-10-01 06:43:37 +03:00
Egor
17587a9b30
Update miniapp-setup.md
2025-10-01 05:53:53 +03:00
Egor
cd9218ec09
Revert "feat: allow configuring miniapp branding"
2025-10-01 04:01:22 +03:00
Egor
0a789d3bd1
feat: allow configuring miniapp branding
2025-10-01 03:58:34 +03:00
Egor
f919368d0b
Document miniapp deployment and reverse proxy setup
2025-10-01 02:32:36 +03:00
Egor
9c1ca5b748
Ensure default web API token stays in sync with settings
2025-09-28 06:16:13 +03:00
Egor
4bc1c402e9
feat: document remnawave endpoints in swagger
2025-09-28 05:09:24 +03:00
Egor
1e14a0919f
Revert "Add Remnawave component management API"
2025-09-28 04:56:33 +03:00
Egor
c10e34ad43
Add Remnawave component management API
2025-09-28 04:53:01 +03:00
Egor
8d5e2037d3
Revert "Replace ReDoc docs with Scalar UI"
2025-09-28 04:30:38 +03:00
Egor
870ee2fb66
Replace ReDoc docs with Scalar UI
2025-09-28 04:27:43 +03:00
Egor
3e3385d1eb
docs: explain enabling swagger ui
2025-09-28 04:20:28 +03:00
Egor
abf1f53218
Add web admin API schemas and docs
2025-09-26 05:37:08 +03:00