Files
remnawave-bedolaga-telegram…/docs/project_structure_reference.md

841 lines
62 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# База по структуре проекта
Этот документ сгенерирован для быстрой навигации по репозиторию. В нём перечислены основные директории, модули, классы и функции.
## Общая структура корня
- `.dockerignore` — файл
- `.env` — файл
- `.env.example` — файл
- `.gitignore` — файл
- `CONTRIBUTING.md` — файл
- `Dockerfile` — файл
- `LICENSE` — файл
- `README.md` — файл
- `SECURITY.md` — файл
- `__pycache__/` — директория
- `alembic.ini` — файл
- `app/` — директория
- `app-config.json` — файл
- `assets/` — директория
- `data/` — директория
- `docker-compose.local.yml` — файл
- `docker-compose.yml` — файл
- `docs/` — директория
- `install_bot.sh` — файл
- `locales/` — директория
- `logs/` — директория
- `main.py` — файл
- `migrations/` — директория
- `miniapp/` — директория
- `requirements.txt` — файл
- `tests/` — директория
- `venv/` — директория
- `vpn_logo.png` — файл
## app
- `app/bot.py` — Python-модуль
Классы: нет
Функции: нет
- `app/config.py` — Python-модуль
Классы: `Settings` (103 методов)
Функции: `refresh_period_prices` — Rebuild cached period price mapping using the latest settings., `get_traffic_prices`, `refresh_traffic_prices`
- `app/database/`
- `app/external/`
- `app/handlers/`
- `app/keyboards/`
- `app/localization/`
- `app/middlewares/`
- `app/services/`
- `app/states.py` — Python-модуль
Классы: `RegistrationStates`, `SubscriptionStates`, `BalanceStates`, `PromoCodeStates`, `AdminStates`, `SupportStates`, `TicketStates`, `AdminTicketStates`, `SupportSettingsStates`, `BotConfigStates`, `PricingStates`, `AutoPayStates`, `SquadCreateStates`, `SquadRenameStates`, `SquadMigrationStates`, `AdminSubmenuStates`
Функции: нет
- `app/utils/`
- `app/webapi/`
### app/database
- `app/database/crud/`
- `app/database/database.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/models.py` — Python-модуль
Классы: `UserStatus`, `SubscriptionStatus`, `TransactionType`, `PromoCodeType`, `PaymentMethod`, `MainMenuButtonActionType`, `MainMenuButtonVisibility`, `YooKassaPayment` (6 методов), `CryptoBotPayment` (5 методов), `MulenPayPayment` (2 методов), `Pal24Payment` (3 методов), `PromoGroup` (3 методов), `User` (5 методов), `Subscription` (11 методов), `Transaction` (1 методов), `SubscriptionConversion` (2 методов), `PromoCode` (2 методов), `PromoCodeUse`, `ReferralEarning` (1 методов), `Squad` (1 методов), `ServiceRule`, `PrivacyPolicy`, `PublicOffer`, `FaqSetting`, `FaqPage`, `SystemSetting`, `MonitoringLog`, `SentNotification`, `DiscountOffer`, `PromoOfferTemplate`, `SubscriptionTemporaryAccess`, `PromoOfferLog`, `BroadcastHistory`, `ServerSquad` (3 методов), `SubscriptionServer`, `SupportAuditLog`, `UserMessage` (1 методов), `WelcomeText`, `AdvertisingCampaign` (2 методов), `AdvertisingCampaignRegistration` (1 методов), `TicketStatus`, `Ticket` (8 методов), `TicketMessage` (3 методов), `WebApiToken` (1 методов), `MainMenuButton` (3 методов)
Функции: нет
- `app/database/universal_migration.py` — Python-модуль
Классы: нет
Функции: нет
#### app/database/crud
- `app/database/crud/campaign.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/cryptobot.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/heleket.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/discount_offer.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/faq.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/main_menu_button.py` — Python-модуль
Классы: нет
Функции: `_enum_value`
- `app/database/crud/mulenpay.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/notification.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/pal24.py` — CRUD helpers for PayPalych (Pal24) payments.
Классы: нет
Функции: нет
- `app/database/crud/privacy_policy.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/promo_group.py` — Python-модуль
Классы: нет
Функции: `_normalize_period_discounts`
- `app/database/crud/promo_offer_log.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/promo_offer_template.py` — Python-модуль
Классы: нет
Функции: `_format_template_fields`
- `app/database/crud/promocode.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/public_offer.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/referral.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/rules.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/server_squad.py` — Python-модуль
Классы: нет
Функции: `_generate_display_name`, `_extract_country_code`
- `app/database/crud/squad.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/subscription.py` — Python-модуль
Классы: нет
Функции: `_get_discount_percent`
- `app/database/crud/subscription_conversion.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/system_setting.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/ticket.py` — Python-модуль
Классы: `TicketCRUD` — CRUD операции для работы с тикетами, `TicketMessageCRUD` — CRUD операции для работы с сообщениями тикетов
Функции: нет
- `app/database/crud/transaction.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/user.py` — Python-модуль
Классы: нет
Функции: `generate_referral_code`
- `app/database/crud/user_message.py` — Python-модуль
Классы: нет
Функции: нет
- `app/database/crud/web_api_token.py` — CRUD операции для токенов административного веб-API.
Классы: нет
Функции: нет
- `app/database/crud/welcome_text.py` — Python-модуль
Классы: нет
Функции: `replace_placeholders`, `get_available_placeholders`
- `app/database/crud/yookassa.py` — Python-модуль
Классы: нет
Функции: нет
### app/external
- `app/external/cryptobot.py` — Python-модуль
Классы: `CryptoBotService` (2 методов)
Функции: нет
- `app/external/heleket.py` — Python-модуль
Классы: `HeleketService` (3 методов)
Функции: нет
- `app/external/heleket_webhook.py` — Python-модуль
Классы: `HeleketWebhookHandler` (3 методов)
Функции: `create_heleket_app`, `start_heleket_webhook_server`
- `app/external/pal24_client.py` — Async client for PayPalych (Pal24) API.
Классы: `Pal24APIError` — Base error for Pal24 API operations., `Pal24Response` (2 методов) — Wrapper for Pal24 API responses., `Pal24Client` (5 методов) — Async client implementing PayPalych API methods.
Функции: нет
- `app/external/pal24_webhook.py` — Flask webhook server for PayPalych callbacks.
Классы: `Pal24WebhookServer` (3 методов) — Threaded Flask server for Pal24 callbacks.
Функции: `_normalize_payload`, `create_pal24_flask_app`
- `app/external/remnawave_api.py` — Python-модуль
Классы: `UserStatus`, `TrafficLimitStrategy`, `RemnaWaveUser`, `RemnaWaveInternalSquad`, `RemnaWaveNode`, `SubscriptionInfo`, `RemnaWaveAPIError` (1 методов), `RemnaWaveAPI` (8 методов)
Функции: `format_bytes`, `parse_bytes`
- `app/external/telegram_stars.py` — Python-модуль
Классы: `TelegramStarsService` (3 методов)
Функции: нет
- `app/external/tribute.py` — Python-модуль
Классы: `TributeService` (2 методов)
Функции: нет
- `app/external/webhook_server.py` — Python-модуль
Классы: `WebhookServer` (3 методов)
Функции: нет
- `app/external/yookassa_webhook.py` — Python-модуль
Классы: `YooKassaWebhookHandler` (3 методов)
Функции: `create_yookassa_webhook_app`
### app/handlers
- `app/handlers/__init__.py` — Python-модуль
Классы: нет
Функции: нет
- `app/handlers/admin/`
- `app/handlers/balance.py` — Python-модуль
Классы: нет
Функции: `get_quick_amount_buttons`, `register_handlers`
- `app/handlers/common.py` — Python-модуль
Классы: нет
Функции: `register_handlers`
- `app/handlers/menu.py` — Python-модуль
Классы: нет
Функции: `_format_rubles`, `_collect_period_discounts`, `_build_group_discount_lines`, `_get_subscription_status`, `_insert_random_message`, `register_handlers`
- `app/handlers/promocode.py` — Python-модуль
Классы: нет
Функции: `register_handlers`
- `app/handlers/referral.py` — Python-модуль
Классы: нет
Функции: `register_handlers`
- `app/handlers/server_status.py` — Python-модуль
Классы: нет
Функции: `_build_status_message`, `_split_into_pages`, `_format_server_lines`, `register_handlers`
- `app/handlers/stars_payments.py` — Python-модуль
Классы: нет
Функции: `register_stars_handlers`
- `app/handlers/start.py` — Python-модуль
Классы: нет
Функции: `_get_language_prompt_text`, `_get_subscription_status`, `_get_subscription_status_simple`, `_insert_random_message`, `get_referral_code_keyboard`, `register_handlers`
- `app/handlers/subscription/` — пакет обработчиков подписки
Ключевые модули:
- `common.py` — вспомогательные функции форматирования, расчётов и построения клавиатур.
- `purchase.py` — пользовательские сценарии, регистрация обработчиков (`register_handlers`).
- `countries.py`, `devices.py`, `traffic.py`, `autopay.py`, `promo.py`, `happ.py`, `links.py`, `notifications.py`, `pricing.py` — тематические обработчики и сервисные утилиты.
Публичные функции доступны через `app.handlers.subscription` (например, `create_deep_link`, `get_servers_display_names`, `register_handlers`).
- `app/handlers/support.py` — Python-модуль
Классы: нет
Функции: `register_handlers`
- `app/handlers/tickets.py` — Python-модуль
Классы: `TicketStates`
Функции: `_split_text_into_pages`, `register_handlers` — Регистрация обработчиков тикетов
- `app/handlers/webhooks.py` — Python-модуль
Классы: нет
Функции: нет
#### app/handlers/admin
- `app/handlers/admin/__init__.py` — Python-модуль
Классы: нет
Функции: нет
- `app/handlers/admin/backup.py` — Python-модуль
Классы: `BackupStates`
Функции: `get_backup_main_keyboard`, `get_backup_list_keyboard`, `get_backup_manage_keyboard`, `get_backup_settings_keyboard`, `register_handlers`
- `app/handlers/admin/bot_configuration.py` — Python-модуль
Классы: `BotConfigInputFilter` (1 методов)
Функции: `_get_group_meta`, `_get_group_description`, `_get_group_icon`, `_get_group_status`, `_get_setting_icon`, `_render_dashboard_overview`, `_build_group_category_index`, `_perform_settings_search`, `_build_search_results_keyboard`, `_parse_env_content`, `_format_preset_preview`, `_chunk`, `_parse_category_payload`, `_parse_group_payload`, `_get_grouped_categories`, `_build_groups_keyboard`, `_build_categories_keyboard`, `_build_settings_keyboard`, `_build_setting_keyboard`, `_render_setting_text`, `register_handlers`
- `app/handlers/admin/campaigns.py` — Python-модуль
Классы: нет
Функции: `_format_campaign_summary`, `_build_campaign_servers_keyboard`, `register_handlers`
- `app/handlers/admin/faq.py` — Python-модуль
Классы: нет
Функции: `_format_timestamp`, `register_handlers`
- `app/handlers/admin/main.py` — Python-модуль
Классы: нет
Функции: `register_handlers`
- `app/handlers/admin/maintenance.py` — Python-модуль
Классы: `MaintenanceStates`
Функции: `register_handlers`
- `app/handlers/admin/messages.py` — Python-модуль
Классы: нет
Функции: `get_message_buttons_selector_keyboard`, `get_updated_message_buttons_selector_keyboard`, `create_broadcast_keyboard`, `get_target_name`, `get_target_display_name`, `register_handlers`
- `app/handlers/admin/monitoring.py` — Python-модуль
Классы: нет
Функции: `_format_toggle`, `_build_notification_settings_view`, `_build_notification_preview_message`, `get_monitoring_logs_keyboard`, `get_monitoring_logs_back_keyboard`, `register_handlers`
- `app/handlers/admin/pricing.py` — Python-модуль
Классы: `ChoiceOption` (1 методов), `SettingEntry` (2 методов)
Функции: `_traffic_package_sort_key`, `_collect_traffic_packages`, `_serialize_traffic_packages`, `_language_code`, `_format_period_label`, `_format_traffic_label`, `_format_trial_summary`, `_format_core_summary`, `_get_period_items`, `_get_traffic_items`, `_get_extra_items`, `_build_period_summary`, `_build_traffic_summary`, `_build_period_options_summary`, `_build_extra_summary`, `_build_settings_section`, `_build_traffic_options_section`, `_build_period_options_section`, `_build_overview`, `_build_section`, `_build_price_prompt`, `_parse_price_input`, `_resolve_label`, `register_handlers`
- `app/handlers/admin/privacy_policy.py` — Python-модуль
Классы: нет
Функции: `_format_timestamp`, `register_handlers`
- `app/handlers/admin/promo_groups.py` — Python-модуль
Классы: нет
Функции: `_format_discount_lines`, `_format_addon_discounts_line`, `_get_addon_discounts_button_text`, `_normalize_periods_dict`, `_collect_period_discounts`, `_format_period_discounts_lines`, `_format_period_discounts_value`, `_parse_period_discounts_input`, `_format_rubles`, `_format_auto_assign_line`, `_format_auto_assign_value`, `_parse_auto_assign_threshold_input`, `_build_edit_menu_content`, `_get_edit_prompt_keyboard`, `_validate_percent`, `register_handlers`
- `app/handlers/admin/promo_offers.py` — Python-модуль
Классы: нет
Функции: `_render_template_text`, `_build_templates_keyboard`, `_build_offer_detail_keyboard`, `_format_offer_remaining`, `_extract_offer_active_hours`, `_extract_template_id_from_notification`, `_format_promo_offer_log_entry`, `_build_logs_keyboard`, `_build_send_keyboard`, `_build_user_button_label`, `_describe_offer`, `_build_connect_button_rows`, `register_handlers`
- `app/handlers/admin/promocodes.py` — Python-модуль
Классы: нет
Функции: `register_handlers`
- `app/handlers/admin/public_offer.py` — Python-модуль
Классы: нет
Функции: `_format_timestamp`, `register_handlers`
- `app/handlers/admin/referrals.py` — Python-модуль
Классы: нет
Функции: `register_handlers`
- `app/handlers/admin/remnawave.py` — Python-модуль
Классы: нет
Функции: `_format_migration_server_label`, `_build_migration_keyboard`, `register_handlers`
- `app/handlers/admin/reports.py` — Python-модуль
Классы: нет
Функции: `register_handlers`
- `app/handlers/admin/rules.py` — Python-модуль
Классы: нет
Функции: `register_handlers`
- `app/handlers/admin/servers.py` — Python-модуль
Классы: нет
Функции: `_build_server_edit_view`, `_build_server_promo_groups_keyboard`, `register_handlers`
- `app/handlers/admin/statistics.py` — Python-модуль
Классы: нет
Функции: `register_handlers`
- `app/handlers/admin/subscriptions.py` — Python-модуль
Классы: нет
Функции: `get_country_flag`, `register_handlers`
- `app/handlers/admin/support_settings.py` — Python-модуль
Классы: `SupportAdvancedStates`
Функции: `_get_support_settings_keyboard`, `register_handlers`
- `app/handlers/admin/system_logs.py` — Python-модуль
Классы: нет
Функции: `_resolve_log_path`, `_format_preview_block`, `_build_logs_message`, `_get_logs_keyboard`, `register_handlers`
- `app/handlers/admin/tickets.py` — Python-модуль
Классы: нет
Функции: `register_handlers` — Регистрация админских обработчиков тикетов
- `app/handlers/admin/updates.py` — Python-модуль
Классы: нет
Функции: `get_updates_keyboard`, `get_version_info_keyboard`, `register_handlers`
- `app/handlers/admin/user_messages.py` — Python-модуль
Классы: `UserMessageStates`
Функции: `get_user_messages_keyboard`, `get_message_actions_keyboard`, `register_handlers`
- `app/handlers/admin/users.py` — Python-модуль
Классы: нет
Функции: `register_handlers`
- `app/handlers/admin/welcome_text.py` — Python-модуль
Классы: нет
Функции: `get_telegram_formatting_info`, `register_welcome_text_handlers`
### app/keyboards
- `app/keyboards/admin.py` — Python-модуль
Классы: нет
Функции: `_t` — Helper for localized button labels with fallbacks., `get_admin_main_keyboard`, `get_admin_users_submenu_keyboard`, `get_admin_promo_submenu_keyboard`, `get_admin_communications_submenu_keyboard`, `get_admin_support_submenu_keyboard`, `get_admin_settings_submenu_keyboard`, `get_admin_system_submenu_keyboard`, `get_admin_reports_keyboard`, `get_admin_report_result_keyboard`, `get_admin_users_keyboard`, `get_admin_users_filters_keyboard`, `get_admin_subscriptions_keyboard`, `get_admin_promocodes_keyboard`, `get_admin_campaigns_keyboard`, `get_campaign_management_keyboard`, `get_campaign_edit_keyboard`, `get_campaign_bonus_type_keyboard`, `get_promocode_management_keyboard`, `get_admin_messages_keyboard`, `get_admin_monitoring_keyboard`, `get_admin_remnawave_keyboard`, `get_admin_statistics_keyboard`, `get_user_management_keyboard`, `get_user_promo_group_keyboard`, `get_confirmation_keyboard`, `get_promocode_type_keyboard`, `get_promocode_list_keyboard`, `get_broadcast_target_keyboard`, `get_custom_criteria_keyboard`, `get_broadcast_history_keyboard`, `get_sync_options_keyboard`, `get_sync_confirmation_keyboard`, `get_sync_result_keyboard`, `get_period_selection_keyboard`, `get_node_management_keyboard`, `get_squad_management_keyboard`, `get_squad_edit_keyboard`, `get_monitoring_keyboard`, `get_monitoring_logs_keyboard`, `get_monitoring_logs_navigation_keyboard`, `get_log_detail_keyboard`, `get_monitoring_clear_confirm_keyboard`, `get_monitoring_status_keyboard`, `get_monitoring_settings_keyboard`, `get_log_type_filter_keyboard`, `get_admin_servers_keyboard`, `get_server_edit_keyboard`, `get_admin_pagination_keyboard`, `get_maintenance_keyboard`, `get_sync_simplified_keyboard`, `get_welcome_text_keyboard`, `get_broadcast_button_config`, `get_broadcast_button_labels`, `get_message_buttons_selector_keyboard`, `get_broadcast_media_keyboard`, `get_media_confirm_keyboard`, `get_updated_message_buttons_selector_keyboard_with_media`
- `app/keyboards/inline.py` — Python-модуль
Классы: нет
Функции: `_get_localized_value`, `_build_additional_buttons`, `get_rules_keyboard`, `get_channel_sub_keyboard`, `get_post_registration_keyboard`, `get_language_selection_keyboard`, `_build_text_main_menu_keyboard`, `get_main_menu_keyboard`, `get_info_menu_keyboard`, `get_happ_download_button_row`, `get_happ_cryptolink_keyboard`, `get_happ_download_platform_keyboard`, `get_happ_download_link_keyboard`, `get_back_keyboard`, `get_server_status_keyboard`, `get_insufficient_balance_keyboard`, `get_subscription_keyboard`, `get_payment_methods_keyboard_with_cart`, `get_subscription_confirm_keyboard_with_cart`, `get_insufficient_balance_keyboard_with_cart`, `get_trial_keyboard`, `get_subscription_period_keyboard`, `get_traffic_packages_keyboard`, `get_countries_keyboard`, `get_devices_keyboard`, `_get_device_declension`, `get_subscription_confirm_keyboard`, `get_balance_keyboard`, `get_payment_methods_keyboard`, `get_yookassa_payment_keyboard`, `get_autopay_notification_keyboard`, `get_subscription_expiring_keyboard`, `get_referral_keyboard`, `get_support_keyboard`, `get_pagination_keyboard`, `get_confirmation_keyboard`, `get_autopay_keyboard`, `get_autopay_days_keyboard`, `_get_days_word`, `get_extend_subscription_keyboard`, `get_add_traffic_keyboard`, `get_change_devices_keyboard`, `get_confirm_change_devices_keyboard`, `get_reset_traffic_confirm_keyboard`, `get_manage_countries_keyboard`, `get_device_selection_keyboard`, `get_connection_guide_keyboard`, `get_app_selection_keyboard`, `get_specific_app_keyboard`, `get_extend_subscription_keyboard_with_prices`, `get_cryptobot_payment_keyboard`, `get_devices_management_keyboard`, `get_updated_subscription_settings_keyboard`, `get_device_reset_confirm_keyboard`, `get_device_management_help_keyboard`, `get_ticket_cancel_keyboard`, `get_my_tickets_keyboard`, `get_ticket_view_keyboard`, `get_ticket_reply_cancel_keyboard`, `get_admin_tickets_keyboard`, `get_admin_ticket_view_keyboard`, `get_admin_ticket_reply_cancel_keyboard`
- `app/keyboards/reply.py` — Python-модуль
Классы: нет
Функции: `get_main_reply_keyboard`, `get_admin_reply_keyboard`, `get_cancel_keyboard`, `get_confirmation_reply_keyboard`, `get_skip_keyboard`, `remove_keyboard`, `get_contact_keyboard`, `get_location_keyboard`
### app/localization
- `app/localization/default_locales/`
- `app/localization/loader.py` — Python-модуль
Классы: нет
Функции: `_normalize_language_code`, `_resolve_user_locales_dir`, `_locale_file_exists`, `_select_fallback_language`, `_determine_default_language`, `_normalize_key`, `_flatten_locale_dict`, `_normalize_locale_dict`, `ensure_locale_templates`, `_load_default_locale`, `_load_user_locale`, `_load_locale_file`, `_merge_dicts`, `load_locale`, `clear_locale_cache`
- `app/localization/locales/`
- `app/localization/texts.py` — Python-модуль
Классы: `Texts` (8 методов)
Функции: `_get_cached_rules_value`, `_build_dynamic_values`, `get_texts`, `_get_default_rules`, `get_rules_sync`, `clear_rules_cache`, `reload_locales`
#### app/localization/default_locales
- `app/localization/default_locales/en.yml` — файл (.yml)
- `app/localization/default_locales/ru.yml` — файл (.yml)
#### app/localization/locales
- `app/localization/locales/en.json` — файл (.json)
- `app/localization/locales/ru.json` — файл (.json)
### app/middlewares
- `app/middlewares/__init__.py` — Python-модуль
Классы: нет
Функции: нет
- `app/middlewares/auth.py` — Python-модуль
Классы: `AuthMiddleware`
Функции: нет
- `app/middlewares/channel_checker.py` — Python-модуль
Классы: `ChannelCheckerMiddleware` (1 методов)
Функции: нет
- `app/middlewares/display_name_restriction.py` — Python-модуль
Классы: `DisplayNameRestrictionMiddleware` (4 методов) — Blocks users whose display name imitates links or official accounts.
Функции: нет
- `app/middlewares/global_error.py` — Python-модуль
Классы: `GlobalErrorMiddleware` (4 методов), `ErrorStatisticsMiddleware` (4 методов)
Функции: нет
- `app/middlewares/logging.py` — Python-модуль
Классы: `LoggingMiddleware`
Функции: нет
- `app/middlewares/maintenance.py` — Python-модуль
Классы: `MaintenanceMiddleware`
Функции: нет
- `app/middlewares/subscription_checker.py` — Python-модуль
Классы: `SubscriptionStatusMiddleware`
Функции: нет
- `app/middlewares/throttling.py` — Python-модуль
Классы: `ThrottlingMiddleware` (1 методов)
Функции: нет
### app/services
- `app/services/__init__.py` — Сервисы бизнес-логики
Классы: нет
Функции: нет
- `app/services/admin_notification_service.py` — Python-модуль
Классы: `AdminNotificationService` (11 методов)
Функции: нет
- `app/services/backup_service.py` — Python-модуль
Классы: `BackupMetadata`, `BackupSettings`, `BackupService` (7 методов)
Функции: нет
- `app/services/broadcast_service.py` — Python-модуль
Классы: `BroadcastMediaConfig`, `BroadcastConfig`, `_BroadcastTask`, `BroadcastService` (4 методов) — Handles broadcast execution triggered from the admin web API.
Функции: нет
- `app/services/campaign_service.py` — Python-модуль
Классы: `CampaignBonusResult`, `AdvertisingCampaignService` (1 методов)
Функции: нет
- `app/services/external_admin_service.py` — Утилиты для синхронизации токена внешней админки.
Классы: нет
Функции: нет
- `app/services/faq_service.py` — Python-модуль
Классы: `FaqService` (3 методов)
Функции: нет
- `app/services/main_menu_button_service.py` — Python-модуль
Классы: `_MainMenuButtonData`, `MainMenuButtonService` (2 методов)
Функции: нет
- `app/services/maintenance_service.py` — Python-модуль
Классы: `MaintenanceStatus`, `MaintenanceService` (6 методов)
Функции: нет
- `app/services/monitoring_service.py` — Python-модуль
Классы: `MonitoringService` (5 методов)
Функции: нет
- `app/services/mulenpay_service.py` — Python-модуль
Классы: `MulenPayService` (4 методов) — Интеграция с Mulen Pay API.
Функции: нет
- `app/services/notification_settings_service.py` — Python-модуль
Классы: `NotificationSettingsService` (32 методов) — Runtime-editable notification settings stored on disk.
Функции: нет
- `app/services/pal24_service.py` — High level integration with PayPalych API.
Классы: `Pal24Service` (5 методов) — Wrapper around :class:`Pal24Client` providing domain helpers.
Функции: нет
- `app/services/payment_service.py` — Python-модуль
Классы: `PaymentService` (3 методов)
Функции: нет
- `app/services/privacy_policy_service.py` — Python-модуль
Классы: `PrivacyPolicyService` (3 методов) — Utility helpers around privacy policy storage and presentation.
Функции: нет
- `app/services/promo_group_assignment.py` — Python-модуль
Классы: нет
Функции: нет
- `app/services/promo_offer_service.py` — Python-модуль
Классы: `PromoOfferService` (1 методов)
Функции: нет
- `app/services/promocode_service.py` — Python-модуль
Классы: `PromoCodeService` (1 методов)
Функции: нет
- `app/services/public_offer_service.py` — Python-модуль
Классы: `PublicOfferService` (4 методов) — Helpers for managing the public offer text and visibility.
Функции: нет
- `app/services/referral_service.py` — Python-модуль
Классы: нет
Функции: нет
- `app/services/remnawave_service.py` — Python-модуль
Классы: `RemnaWaveConfigurationError` — Raised when RemnaWave API configuration is missing., `RemnaWaveService` (7 методов)
Функции: нет
- `app/services/reporting_service.py` — Python-модуль
Классы: `ReportingServiceError` — Base error for the reporting service., `ReportPeriod`, `ReportPeriodRange`, `ReportingService` (7 методов) — Generates admin summary reports and can schedule daily delivery.
Функции: нет
- `app/services/server_status_service.py` — Python-модуль
Классы: `ServerStatusEntry`, `ServerStatusError` — Raised when server status information cannot be fetched or parsed., `ServerStatusService` (6 методов)
Функции: нет
- `app/services/subscription_checkout_service.py` — Python-модуль
Классы: нет
Функции: `should_offer_checkout_resume` — Determine whether checkout resume button should be available for the user.
- `app/services/subscription_purchase_service.py` — Python-модуль
Классы: `PurchaseTrafficOption` (1 методов), `PurchaseTrafficConfig` (1 методов), `PurchaseServerOption` (1 методов), `PurchaseServersConfig` (1 методов), `PurchaseDevicesConfig` (1 методов), `PurchasePeriodConfig` (1 методов), `PurchaseSelection`, `PurchasePricingResult`, `PurchaseOptionsContext`, `PurchaseValidationError` (1 методов), `PurchaseBalanceError` (1 методов), `MiniAppSubscriptionPurchaseService` (5 методов) — Builds configuration and pricing for subscription purchases in the mini app.
Функции: `_apply_percentage_discount`, `_apply_discount_to_monthly_component`, `_get_promo_offer_discount_percent`, `_apply_promo_offer_discount`, `_build_server_option`
- `app/services/subscription_service.py` — Python-модуль
Классы: `SubscriptionService` (7 методов)
Функции: `_resolve_discount_percent`, `_resolve_addon_discount_percent`, `get_traffic_reset_strategy`
- `app/services/support_settings_service.py` — Python-модуль
Классы: `SupportSettingsService` (23 методов) — Runtime editable support settings with JSON persistence.
Функции: нет
- `app/services/system_settings_service.py` — Python-модуль
Классы: `SettingDefinition` (1 методов), `ChoiceOption`, `ReadOnlySettingError` — Исключение, выбрасываемое при попытке изменить настройку только для чтения., `BotConfigurationService` (33 методов)
Функции: `_title_from_key`, `_truncate`
- `app/services/tribute_service.py` — Python-модуль
Классы: `TributeService` (1 методов)
Функции: нет
- `app/services/user_service.py` — Python-модуль
Классы: `UserService`
Функции: нет
- `app/services/version_service.py` — Python-модуль
Классы: `VersionInfo` (5 методов), `VersionService` (5 методов)
Функции: нет
- `app/services/web_api_token_service.py` — Python-модуль
Классы: `WebApiTokenService` (2 методов) — Сервис для управления токенами административного веб-API.
Функции: нет
- `app/services/yookassa_service.py` — Python-модуль
Классы: `YooKassaService` (1 методов)
Функции: нет
### app/utils
- `app/utils/__init__.py` — Python-модуль
Классы: нет
Функции: нет
- `app/utils/cache.py` — Python-модуль
Классы: `CacheService` (1 методов), `UserCache`, `SystemCache`, `RateLimitCache`
Функции: `cache_key`
- `app/utils/check_reg_process.py` — Python-модуль
Классы: нет
Функции: `is_registration_process`
- `app/utils/currency_converter.py` — Python-модуль
Классы: `CurrencyConverter` (1 методов)
Функции: нет
- `app/utils/decorators.py` — Python-модуль
Классы: нет
Функции: `admin_required`, `error_handler`, `_extract_event`, `state_cleanup`, `typing_action`, `rate_limit`
- `app/utils/formatters.py` — Python-модуль
Классы: нет
Функции: `format_datetime`, `format_date`, `format_time_ago`, `format_days_declension`, `format_duration`, `format_bytes`, `format_percentage`, `format_number`, `format_price_range`, `truncate_text`, `format_username`, `format_subscription_status`, `format_traffic_usage`, `format_boolean`
- `app/utils/message_patch.py` — Python-модуль
Классы: нет
Функции: `is_qr_message`, `_get_language`, `_default_privacy_hint`, `append_privacy_hint`, `prepare_privacy_safe_kwargs`, `is_privacy_restricted_error`, `patch_message_methods`
- `app/utils/miniapp_buttons.py` — Python-модуль
Классы: нет
Функции: `build_miniapp_or_callback_button` — Create a button that opens the miniapp in text menu mode.
- `app/utils/pagination.py` — Python-модуль
Классы: `PaginationResult` (1 методов)
Функции: `paginate_list`, `get_pagination_info`, `get_page_numbers`
- `app/utils/payment_utils.py` — Python-модуль
Классы: нет
Функции: `get_available_payment_methods` — Возвращает список доступных способов оплаты с их настройками, `get_payment_methods_text` — Генерирует текст с описанием доступных способов оплаты, `is_payment_method_available` — Проверяет, доступен ли конкретный способ оплаты, `get_payment_method_status` — Возвращает статус всех способов оплаты, `get_enabled_payment_methods_count` — Возвращает количество включенных способов оплаты (не считая поддержку)
- `app/utils/photo_message.py` — Python-модуль
Классы: нет
Функции: `_resolve_media`, `_get_language`, `_build_base_kwargs`
- `app/utils/pricing_utils.py` — Python-модуль
Классы: нет
Функции: `calculate_months_from_days`, `get_remaining_months`, `calculate_period_multiplier`, `calculate_prorated_price`, `apply_percentage_discount`, `format_period_description`, `validate_pricing_calculation`, `get_period_info`
- `app/utils/promo_offer.py` — Python-модуль
Классы: нет
Функции: `_escape_format_braces` — Escape braces so str.format treats them as literals., `get_user_active_promo_discount_percent`, `_format_time_left`, `_build_progress_bar`
- `app/utils/security.py` — Утилиты безопасности и генерации ключей.
Классы: нет
Функции: `hash_api_token` — Возвращает хеш токена в формате hex., `generate_api_token` — Генерирует криптографически стойкий токен.
- `app/utils/startup_timeline.py` — Python-модуль
Классы: `StepRecord`, `StageHandle` (6 методов), `StartupTimeline` (6 методов)
Функции: нет
- `app/utils/subscription_utils.py` — Python-модуль
Классы: нет
Функции: `get_display_subscription_link`, `get_happ_cryptolink_redirect_link`, `convert_subscription_link_to_happ_scheme`
- `app/utils/telegram_webapp.py` — Utilities for validating Telegram WebApp initialization data.
Классы: `TelegramWebAppAuthError` — Raised when Telegram WebApp init data fails validation.
Функции: `parse_webapp_init_data` — Validate and parse Telegram WebApp init data.
- `app/utils/user_utils.py` — Python-модуль
Классы: нет
Функции: `format_referrer_info` — Return formatted referrer info for admin notifications.
- `app/utils/validators.py` — Python-модуль
Классы: нет
Функции: `validate_email`, `validate_phone`, `validate_telegram_username`, `validate_promocode`, `validate_amount`, `validate_positive_integer`, `validate_date_string`, `validate_url`, `validate_uuid`, `validate_traffic_amount`, `validate_subscription_period`, `sanitize_html`, `sanitize_telegram_name` — Санитизация Telegram-имени для безопасной вставки в HTML и хранения., `validate_device_count`, `validate_referral_code`, `validate_html_tags`, `validate_html_structure`, `fix_html_tags`, `get_html_help_text`, `validate_rules_content`
### app/webapi
- `app/webapi/__init__.py` — Пакет административного веб-API.
Классы: нет
Функции: нет
- `app/webapi/app.py` — Python-модуль
Классы: нет
Функции: `create_web_api_app`
- `app/webapi/background/`
- `app/webapi/dependencies.py` — Python-модуль
Классы: нет
Функции: нет
- `app/webapi/middleware.py` — Python-модуль
Классы: `RequestLoggingMiddleware` — Логирование входящих запросов в административный API.
Функции: нет
- `app/webapi/routes/`
- `app/webapi/schemas/`
- `app/webapi/server.py` — Python-модуль
Классы: `WebAPIServer` (1 методов) — Асинхронный uvicorn-сервер для административного API.
Функции: нет
#### app/webapi/background
- `app/webapi/background/__init__.py` — Background utilities for Web API.
Классы: нет
Функции: нет
- `app/webapi/background/backup_tasks.py` — Python-модуль
Классы: `BackupTaskState`, `BackupTaskManager` (1 методов)
Функции: нет
#### app/webapi/routes
- `app/webapi/routes/__init__.py` — Python-модуль
Классы: нет
Функции: нет
- `app/webapi/routes/backups.py` — Python-модуль
Классы: нет
Функции: `_parse_datetime`, `_to_int`, `_serialize_backup`
- `app/webapi/routes/broadcasts.py` — Python-модуль
Классы: нет
Функции: `_serialize_broadcast`
- `app/webapi/routes/campaigns.py` — Python-модуль
Классы: нет
Функции: `_serialize_campaign`
- `app/webapi/routes/config.py` — Python-модуль
Классы: нет
Функции: `_coerce_value`, `_serialize_definition`
- `app/webapi/routes/health.py` — Python-модуль
Классы: нет
Функции: нет
- `app/webapi/routes/main_menu_buttons.py` — Python-модуль
Классы: нет
Функции: `_serialize`
- `app/webapi/routes/miniapp.py` — Python-модуль
Классы: нет
Функции: `_normalize_autopay_days`, `_get_autopay_day_options`, `_build_autopay_payload`, `_autopay_response_extras`, `_compute_cryptobot_limits`, `_current_request_timestamp`, `_compute_stars_min_amount`, `_normalize_stars_amount`, `_build_balance_invoice_payload`, `_merge_purchase_selection_from_request`, `_parse_client_timestamp`, `_classify_status`, `_format_gb`, `_format_gb_label`, `_format_limit_label`, `_normalize_amount_kopeks`, `_extract_template_id`, `_extract_offer_extra`, `_extract_offer_type`, `_normalize_effect_type`, `_determine_offer_icon`, `_extract_offer_test_squad_uuids`, `_format_offer_message`, `_extract_offer_duration_hours`, `_format_bonus_label`, `_bytes_to_gb`, `_status_label`, `_parse_datetime_string`, `_resolve_display_name`, `_is_remnawave_configured`, `_serialize_transaction`, `_is_trial_available_for_user`, `_safe_int`, `_normalize_period_discounts`, `_extract_promo_discounts`, `_normalize_language_code`, `_build_renewal_status_message`, `_build_promo_offer_payload`, `_build_renewal_period_id`, `_parse_period_identifier`, `_get_addon_discount_percent_for_user`, `_get_period_hint_from_subscription`, `_validate_subscription_id`, `_ensure_paid_subscription`
- `app/webapi/routes/pages.py` — Python-модуль
Классы: нет
Функции: `_serialize_rich_page`, `_serialize_faq_page`, `_serialize_rules`
- `app/webapi/routes/promo_groups.py` — Python-модуль
Классы: нет
Функции: `_normalize_period_discounts`, `_serialize`
- `app/webapi/routes/promo_offers.py` — Python-модуль
Классы: нет
Функции: `_serialize_user`, `_serialize_subscription`, `_serialize_offer`, `_serialize_template`, `_build_log_response`
- `app/webapi/routes/promocodes.py` — Python-модуль
Классы: нет
Функции: `_normalize_datetime`, `_serialize_promocode`, `_serialize_recent_use`, `_validate_create_payload`, `_validate_update_payload`
- `app/webapi/routes/remnawave.py` — Python-модуль
Классы: нет
Функции: `_get_service`, `_ensure_service_configured`, `_serialize_node`, `_parse_last_updated`
- `app/webapi/routes/stats.py` — Python-модуль
Классы: нет
Функции: нет
- `app/webapi/routes/subscriptions.py` — Python-модуль
Классы: нет
Функции: `_serialize_subscription`
- `app/webapi/routes/tickets.py` — Python-модуль
Классы: нет
Функции: `_serialize_message`, `_serialize_ticket`
- `app/webapi/routes/tokens.py` — Python-модуль
Классы: нет
Функции: `_serialize`
- `app/webapi/routes/transactions.py` — Python-модуль
Классы: нет
Функции: `_serialize`
- `app/webapi/routes/users.py` — Python-модуль
Классы: нет
Функции: `_serialize_promo_group`, `_serialize_subscription`, `_serialize_user`, `_apply_search_filter`
#### app/webapi/schemas
- `app/webapi/schemas/__init__.py` — Python-модуль
Классы: нет
Функции: нет
- `app/webapi/schemas/backups.py` — Python-модуль
Классы: `BackupCreateResponse`, `BackupInfo`, `BackupListResponse`, `BackupStatusResponse`, `BackupTaskInfo`, `BackupTaskListResponse`
Функции: нет
- `app/webapi/schemas/broadcasts.py` — Python-модуль
Классы: `BroadcastMedia`, `BroadcastCreateRequest` (2 методов), `BroadcastResponse`, `BroadcastListResponse`
Функции: нет
- `app/webapi/schemas/campaigns.py` — Python-модуль
Классы: `CampaignBase` (1 методов), `CampaignCreateRequest` (2 методов), `CampaignResponse`, `CampaignListResponse`, `CampaignUpdateRequest` (3 методов)
Функции: нет
- `app/webapi/schemas/config.py` — Python-модуль
Классы: `SettingCategorySummary` — Краткое описание категории настройки., `SettingCategoryRef` — Ссылка на категорию, к которой относится настройка., `SettingChoice` — Вариант значения для настройки с выбором., `SettingDefinition` — Полное описание настройки и её текущего состояния., `SettingUpdateRequest` — Запрос на обновление значения настройки.
Функции: нет
- `app/webapi/schemas/health.py` — Python-модуль
Классы: `HealthFeatureFlags` — Флаги доступности функций административного API., `HealthCheckResponse` — Ответ на health-check административного API.
Функции: нет
- `app/webapi/schemas/main_menu_buttons.py` — Python-модуль
Классы: `MainMenuButtonResponse`, `MainMenuButtonCreateRequest`, `MainMenuButtonUpdateRequest` (2 методов), `MainMenuButtonListResponse`
Функции: `_clean_text`, `_validate_action_value`
- `app/webapi/schemas/miniapp.py` — Python-модуль
Классы: `MiniAppBranding`, `MiniAppSubscriptionRequest`, `MiniAppSubscriptionUser`, `MiniAppPromoGroup`, `MiniAppAutoPromoGroupLevel`, `MiniAppConnectedServer`, `MiniAppDevice`, `MiniAppDeviceRemovalRequest`, `MiniAppDeviceRemovalResponse`, `MiniAppTransaction`, `MiniAppPromoOffer`, `MiniAppPromoOfferClaimRequest`, `MiniAppPromoOfferClaimResponse`, `MiniAppSubscriptionAutopay`, `MiniAppSubscriptionRenewalPeriod`, `MiniAppSubscriptionRenewalOptionsRequest`, `MiniAppSubscriptionRenewalOptionsResponse`, `MiniAppSubscriptionRenewalRequest`, `MiniAppSubscriptionRenewalResponse`, `MiniAppSubscriptionAutopayRequest`, `MiniAppSubscriptionAutopayResponse`, `MiniAppPromoCode`, `MiniAppPromoCodeActivationRequest`, `MiniAppPromoCodeActivationResponse`, `MiniAppFaqItem`, `MiniAppFaq`, `MiniAppRichTextDocument`, `MiniAppLegalDocuments`, `MiniAppReferralTerms`, `MiniAppReferralStats`, `MiniAppReferralRecentEarning`, `MiniAppReferralItem`, `MiniAppReferralList`, `MiniAppReferralInfo`, `MiniAppPaymentMethodsRequest`, `MiniAppPaymentMethod`, `MiniAppPaymentMethodsResponse`, `MiniAppPaymentCreateRequest`, `MiniAppPaymentCreateResponse`, `MiniAppPaymentStatusQuery`, `MiniAppPaymentStatusRequest`, `MiniAppPaymentStatusResult`, `MiniAppPaymentStatusResponse`, `MiniAppSubscriptionResponse`, `MiniAppSubscriptionServerOption`, `MiniAppSubscriptionTrafficOption`, `MiniAppSubscriptionDeviceOption`, `MiniAppSubscriptionCurrentSettings`, `MiniAppSubscriptionServersSettings`, `MiniAppSubscriptionTrafficSettings`, `MiniAppSubscriptionDevicesSettings`, `MiniAppSubscriptionBillingContext`, `MiniAppSubscriptionSettings`, `MiniAppSubscriptionSettingsResponse`, `MiniAppSubscriptionSettingsRequest` (1 методов), `MiniAppSubscriptionServersUpdateRequest` (1 методов), `MiniAppSubscriptionTrafficUpdateRequest` (1 методов), `MiniAppSubscriptionDevicesUpdateRequest` (1 методов), `MiniAppSubscriptionUpdateResponse`, `MiniAppSubscriptionPurchaseOptionsRequest`, `MiniAppSubscriptionPurchaseOptionsResponse`, `MiniAppSubscriptionPurchasePreviewRequest` (1 методов), `MiniAppSubscriptionPurchasePreviewResponse`, `MiniAppSubscriptionPurchaseRequest`, `MiniAppSubscriptionPurchaseResponse`, `MiniAppSubscriptionTrialRequest`, `MiniAppSubscriptionTrialResponse`
Функции: нет
- `app/webapi/schemas/pages.py` — Python-модуль
Классы: `RichTextPageResponse` — Generic representation for rich text informational pages., `RichTextPageUpdateRequest`, `FaqPageResponse`, `FaqPageListResponse`, `FaqPageCreateRequest`, `FaqPageUpdateRequest`, `FaqReorderItem`, `FaqReorderRequest`, `FaqStatusResponse`, `FaqStatusUpdateRequest`, `ServiceRulesResponse`, `ServiceRulesUpdateRequest`, `ServiceRulesHistoryResponse`
Функции: нет
- `app/webapi/schemas/promo_groups.py` — Python-модуль
Классы: `PromoGroupResponse`, `_PromoGroupBase` (1 методов), `PromoGroupCreateRequest`, `PromoGroupUpdateRequest`, `PromoGroupListResponse`
Функции: `_normalize_period_discounts`
- `app/webapi/schemas/promo_offers.py` — Python-модуль
Классы: `PromoOfferUserInfo`, `PromoOfferSubscriptionInfo`, `PromoOfferResponse`, `PromoOfferListResponse`, `PromoOfferCreateRequest`, `PromoOfferTemplateResponse`, `PromoOfferTemplateListResponse`, `PromoOfferTemplateUpdateRequest`, `PromoOfferLogOfferInfo`, `PromoOfferLogResponse`, `PromoOfferLogListResponse`
Функции: нет
- `app/webapi/schemas/promocodes.py` — Python-модуль
Классы: `PromoCodeResponse`, `PromoCodeListResponse`, `PromoCodeCreateRequest`, `PromoCodeUpdateRequest`, `PromoCodeRecentUse`, `PromoCodeDetailResponse`
Функции: нет
- `app/webapi/schemas/remnawave.py` — Python-модуль
Классы: `RemnaWaveConnectionStatus`, `RemnaWaveStatusResponse`, `RemnaWaveNode`, `RemnaWaveNodeListResponse`, `RemnaWaveNodeActionRequest`, `RemnaWaveNodeActionResponse`, `RemnaWaveNodeStatisticsResponse`, `RemnaWaveNodeUsageResponse`, `RemnaWaveBandwidth`, `RemnaWaveTrafficPeriod`, `RemnaWaveTrafficPeriods`, `RemnaWaveSystemSummary`, `RemnaWaveServerInfo`, `RemnaWaveSystemStatsResponse`, `RemnaWaveSquad`, `RemnaWaveSquadListResponse`, `RemnaWaveSquadCreateRequest`, `RemnaWaveSquadUpdateRequest`, `RemnaWaveSquadActionRequest`, `RemnaWaveOperationResponse`, `RemnaWaveInboundsResponse`, `RemnaWaveUserTrafficResponse`, `RemnaWaveSyncFromPanelRequest`, `RemnaWaveGenericSyncResponse`, `RemnaWaveSquadMigrationPreviewResponse`, `RemnaWaveSquadMigrationRequest`, `RemnaWaveSquadMigrationStats`, `RemnaWaveSquadMigrationResponse`
Функции: нет
- `app/webapi/schemas/subscriptions.py` — Python-модуль
Классы: `SubscriptionResponse`, `SubscriptionCreateRequest`, `SubscriptionExtendRequest`, `SubscriptionTrafficRequest`, `SubscriptionDevicesRequest`, `SubscriptionSquadRequest`
Функции: нет
- `app/webapi/schemas/tickets.py` — Python-модуль
Классы: `TicketMessageResponse`, `TicketResponse`, `TicketStatusUpdateRequest`, `TicketPriorityUpdateRequest`, `TicketReplyBlockRequest`
Функции: нет
- `app/webapi/schemas/tokens.py` — Python-модуль
Классы: `TokenResponse`, `TokenCreateRequest`, `TokenCreateResponse`
Функции: нет
- `app/webapi/schemas/transactions.py` — Python-модуль
Классы: `TransactionResponse`, `TransactionListResponse`
Функции: нет
- `app/webapi/schemas/users.py` — Python-модуль
Классы: `PromoGroupSummary`, `SubscriptionSummary`, `UserResponse`, `UserListResponse`, `UserCreateRequest`, `UserUpdateRequest`, `BalanceUpdateRequest`
Функции: нет
## tests
- `tests/conftest.py` — Глобальные фикстуры и настройки окружения для тестов.
Классы: нет
Функции: `fixed_datetime` — Возвращает фиксированную отметку времени для воспроизводимых проверок.
- `tests/external/`
- `tests/services/`
- `tests/test_miniapp_payments.py` — Python-модуль
Классы: нет
Функции: `anyio_backend`, `test_compute_cryptobot_limits_scale_with_rate`
- `tests/utils/`
### tests/external
- `tests/external/__init__.py` — Python-модуль
Классы: нет
Функции: нет
- `tests/external/test_cryptobot_service.py` — Тесты для внешнего клиента CryptoBotService.
Классы: нет
Функции: `anyio_backend`, `_enable_token`, `test_verify_webhook_signature`, `test_verify_webhook_signature_without_secret`
- `tests/external/test_webhook_server.py` — Тестирование хендлеров WebhookServer без запуска реального сервера.
Классы: `DummyBot`
Функции: `anyio_backend`, `webhook_server`, `_mock_request`
### tests/services
- `tests/services/__init__.py` — Python-модуль
Классы: нет
Функции: нет
- `tests/services/test_mulenpay_service_adapter.py` — Юнит-тесты MulenPayService.
Классы: нет
Функции: `anyio_backend`, `_enable_service`, `test_is_configured`, `test_format_and_signature`
- `tests/services/test_pal24_service_adapter.py` — Тесты Pal24Service и вспомогательных функций.
Классы: `StubPal24Client` (1 методов)
Функции: `_enable_pal24`, `anyio_backend`, `test_parse_callback_success`, `test_parse_callback_missing_fields`, `test_convert_to_kopeks_and_expiration`
- `tests/services/test_payment_service_cryptobot.py` — Тесты сценариев CryptoBot в PaymentService.
Классы: `DummySession` (2 методов), `DummyLocalPayment` (1 методов), `StubCryptoBotService` (1 методов)
Функции: `anyio_backend`, `_make_service`
- `tests/services/test_payment_service_heleket.py` — Тесты сценариев Heleket в PaymentService.
Классы: `DummySession` (2 методов), `DummyLocalPayment` (1 методов), `StubHeleketService` (1 методов)
Функции: `anyio_backend`, `_make_service`
- `tests/services/test_payment_service_mulenpay.py` — Тесты для сценариев MulenPay в PaymentService.
Классы: `DummySession`, `DummyLocalPayment` (1 методов), `StubMulenPayService` (1 методов)
Функции: `anyio_backend`, `_make_service`
- `tests/services/test_payment_service_pal24.py` — Тесты Pal24 сценариев PaymentService.
Классы: `DummySession`, `DummyLocalPayment` (1 методов), `StubPal24Service` (1 методов)
Функции: `anyio_backend`, `_make_service`
- `tests/services/test_payment_service_stars.py` — Тесты для Telegram Stars-сценариев внутри PaymentService.
Классы: `DummyBot` (1 методов) — Минимальная заглушка aiogram.Bot для тестов.
Функции: `anyio_backend` — Ограничиваем anyio тесты только бэкендом asyncio., `_make_service` — Создаёт экземпляр PaymentService без выполнения полного конструктора.
- `tests/services/test_payment_service_tribute.py` — Тесты Tribute-платежей PaymentService.
Классы: нет
Функции: `anyio_backend`, `_make_service`, `test_verify_tribute_webhook_signature`, `test_verify_tribute_webhook_returns_false_without_key`
- `tests/services/test_payment_service_webhooks.py` — Интеграционные проверки обработки вебхуков PaymentService.
Классы: `DummyBot` (1 методов), `FakeSession` (2 методов)
Функции: `_make_service`, `anyio_backend`
- `tests/services/test_payment_service_yookassa.py` — Тесты для YooKassa-сценариев PaymentService.
Классы: `DummySession` (1 методов) — Простейшая заглушка AsyncSession., `DummyLocalPayment` (1 методов) — Объект, имитирующий локальную запись платежа., `StubYooKassaService` (1 методов) — Заглушка для SDK, сохраняющая вызовы.
Функции: `anyio_backend` — Запускаем async-тесты на asyncio, чтобы избежать зависимостей trio., `_make_service`
- `tests/services/test_yookassa_service_adapter.py` — Тесты низкоуровневого сервиса YooKassaService.
Классы: `DummyLoop`
Функции: `anyio_backend`, `_prepare_config`, `test_init_without_credentials`
### tests/utils
- `tests/utils/__init__.py` — Python-модуль
Классы: нет
Функции: нет
- `tests/utils/test_formatters_basic.py` — Тесты для базовых форматтеров из app.utils.formatters.
Классы: нет
Функции: `test_format_datetime_handles_iso_strings` — ISO-строка должна корректно преобразовываться в отформатированный текст., `test_format_date_uses_custom_format` — Можно задавать собственный шаблон вывода., `test_format_time_ago_returns_human_readable_text` — Разница во времени должна переводиться в человеко-понятную строку., `test_format_days_declension_handles_russian_rules` — Склонение дней в русском языке зависит от числа., `test_format_duration_switches_units`В зависимости от длины интервала выбирается подходящая единица измерения., `test_format_bytes_scales_value` — Размер должен выражаться в наиболее подходящей единице., `test_format_percentage_respects_precision` — Проценты форматируются с нужным количеством знаков., `test_format_number_inserts_separators` — Разделители тысяч должны расставляться корректно как для int, так и для float., `test_truncate_text_appends_suffix` — Строки, превышающие лимит, должны обрезаться и дополняться суффиксом., `test_format_username_prefers_full_name` — Полное имя имеет приоритет, затем username, затем ID., `test_format_subscription_status_handles_active_and_expired` — Статус подписки различается для активных/просроченных случаев., `test_format_traffic_usage_supports_unlimited` — При безлимитном тарифе в строке должна появляться бесконечность., `test_format_boolean_localises_output` — Булевые значения отображаются локализованными словами.
- `tests/utils/test_security.py` — Тесты для функций безопасности из app.utils.security.
Классы: нет
Функции: `test_hash_api_token_default_algorithm_matches_hashlib` — Проверяем, что алгоритм по умолчанию совпадает с hashlib.sha256., `test_hash_api_token_accepts_supported_algorithms` — Каждый поддерживаемый алгоритм должен выдавать корректный результат., `test_hash_api_token_rejects_unknown_algorithm` — Некорректное имя алгоритма должно приводить к ValueError., `test_generate_api_token_respects_length_bounds` — Функция должна ограничивать длину токена безопасным диапазоном., `test_generate_api_token_produces_random_values` — Два последовательных вызова должны выдавать разные токены.
- `tests/utils/test_validators_basic.py` — Базовые тесты для валидаторов из app.utils.validators.
Классы: нет
Функции: `test_validate_email_handles_expected_patterns` — Проверяем типичные корректные и некорректные адреса., `test_validate_phone_strips_formatting_and_checks_pattern` — Телефон должен соответствовать стандарту E.164 после очистки., `test_validate_telegram_username_enforces_length` — Telegram-логин должен быть 5-32 символов и содержать допустимые символы., `test_validate_amount_returns_float_within_bounds` — Числа должны конвертироваться с уважением к диапазону., `test_validate_positive_integer_enforces_upper_bound` — Положительное целое число выходит за пределы — возвращаем None., `test_validate_traffic_amount_supports_units` — Валидатор трафика распознаёт разные единицы измерения и особые значения., `test_validate_subscription_period_accepts_reasonable_range` — Диапазон допустимой длительности от 1 до 3650 дней., `test_validate_uuid_detects_standard_format` — UUID должен соответствовать HEX шаблону версии 4/5., `test_validate_url_recognises_https_links` — Валидатор URL допускает http/https ссылки и отклоняет произвольные строки., `test_validate_html_tags_rejects_unknown_tags` — Неизвестные HTML теги должны приводить к отказу., `test_validate_html_structure_detects_wrong_nesting` — Неправильная вложенность тегов должна сообщаться пользователю., `test_fix_html_tags_repairs_missing_quotes` — Автоисправление должно добавлять кавычки у ссылок., `test_validate_rules_content_detects_structure_error` — При нарушении структуры должны вернуться сообщение и отсутствие подсказки., `test_validate_rules_content_accepts_supported_markup` — Корректный HTML должен проходить проверку без сообщений.
## migrations
- `migrations/alembic/`
### migrations/alembic
- `migrations/alembic/alembic.ini` — файл (.ini)
- `migrations/alembic/env.py` — Python-модуль
Классы: нет
Функции: `run_migrations_offline`, `do_run_migrations`, `run_migrations_online`
- `migrations/alembic/versions/`
#### migrations/alembic/versions
- `migrations/alembic/versions/1f5f3a3f5a4d_add_promo_groups_and_user_fk.py` — add promo groups table and link users
Классы: нет
Функции: `_table_exists`, `_column_exists`, `_index_exists`, `_foreign_key_exists`, `upgrade`, `downgrade`
- `migrations/alembic/versions/4b6b0f58c8f9_add_period_discounts_to_promo_groups.py` — Python-модуль
Классы: нет
Функции: `upgrade`, `downgrade`
- `migrations/alembic/versions/5d1f1f8b2e9a_add_advertising_campaigns.py` — add advertising campaigns tables
Классы: нет
Функции: `_table_exists`, `_index_exists`, `upgrade`, `downgrade`
- `migrations/alembic/versions/8fd1e338eb45_add_sent_notifications_table.py` — add sent notifications table
Классы: нет
Функции: `_table_exists`, `_unique_constraint_exists`, `upgrade`, `downgrade`
## docs
- `docs/miniapp-setup.md` — файл (.md)
- `docs/web-admin-integration.md` — файл (.md)
## miniapp
- `miniapp/app-config.json` — файл (.json)
- `miniapp/index.html` — файл (.html)
- `miniapp/redirect/`
### miniapp/redirect
- `miniapp/redirect/index.html` — файл (.html)
## assets
- `assets/bedolaga_app3.svg` — файл (.svg)
- `assets/logo2.svg` — файл (.svg)
## locales
- `locales/en.json` — файл (.json)
- `locales/ru.json` — файл (.json)
## data
- `data/backups/`
- `data/bot.db` — файл (.db)
### data/backups
## logs
- `logs/bot.log` — файл (.log)