Skip to main content

Обзор

Бот использует PostgreSQL через SQLAlchemy 2.x async ORM. Все модели определены в app/database/models.py.

Миграции (Alembic)

Миграции хранятся в migrations/alembic/versions/.
При запуске бот автоматически выполняет alembic upgrade head через app/database/migrations.py.
Для существующих production баз после перехода на Alembic выполните make migrate-stamp один раз.

Настройка подключения

Бот поддерживает как PostgreSQL, так и SQLite (для разработки).

CRUD операции

Каждая сущность имеет свой CRUD-модуль в app/database/crud/:

Enum-типы

Схема по доменам

Пользователи (3 таблицы)

users — центральная таблица, к ней привязаны все остальные сущности. Связи: subscription (1:1), transactions (1:N), referrals (self 1:N), user_promo_groups (1:N), tickets (1:N), referral_earnings (1:N), discount_offers (1:N) cabinet_refresh_tokens — JWT refresh-токены для Cabinet. partner_applications — заявки на партнерскую программу.

Подписки (5 таблиц)

subscriptions — VPN-подписка (1:1 с пользователем). subscription_servers — привязка подписки к серверам. subscription_conversions — конверсия триала в платную подписку. subscription_events — журнал событий подписки (event_type, amount_kopeks, message, extra JSON). traffic_purchases — докупки трафика (traffic_gb, expires_at = дата покупки + 30 дней).

Платежи и транзакции (12 таблиц)

transactions — единый финансовый реестр. 10 таблиц платежных провайдеров — по одной на каждый провайдер. Все содержат: user_id, status, transaction_id, сумму и ID во внешней системе. Telegram Stars и Tribute не имеют отдельных таблиц — используют transactions напрямую. payment_method_configs — настройки отображения платежных методов в Cabinet.

Промо-система (8 таблиц + 3 M2M)

promo_groups — группы со скидками. M2M связи: server_squads, tariffs, payment_method_configs user_promo_groups — пользователь может состоять в нескольких группах (user_id + promo_group_id составной PK). promocodes — промокоды (5 типов). promocode_uses — журнал активаций (promocode_id, user_id, used_at). discount_offers — персональные скидочные предложения. promo_offer_templates — шаблоны предложений (тип, текст сообщения, кнопка, часы действия, серверы для test_access). subscription_temporary_access — временный доступ к серверам через промо-предложения. promo_offer_logs — журнал действий с предложениями (claimed, consumed, disabled).

Реферальная система (3 таблицы)

referral_earnings — начисления реферальных комиссий. withdrawal_requests — заявки на вывод средств. sent_notifications — трекинг отправленных уведомлений (предотвращает дублирование).

Поддержка (5 таблиц)

tickets — тикеты поддержки (status, priority, user_reply_block_permanent, user_reply_block_until). ticket_messages — сообщения в тикетах (текст, медиа-вложения с media_file_id). ticket_notifications — уведомления для Cabinet (notification_type: new_ticket, admin_reply, user_reply). support_audit_logs — журнал действий модераторов (action, actor_user_id, target_user_id, details JSON). broadcast_history — история рассылок.

Конкурсы (6 таблиц)

referral_contests — реферальные конкурсы (title, contest_type, start_at/end_at, daily_summary_times). referral_contest_events — события конкурса (UNIQUE: contest_id + referral_id). referral_contest_virtual_participants — виртуальные участники для буста лидерборда. contest_templates — шаблоны ежедневных игр (7 типов). contest_rounds — раунды игр (status: active/finished, winners_count). contest_attempts — попытки участия (UNIQUE: round_id + user_id).

Кампании (2 таблицы)

advertising_campaigns — рекламные кампании с deep-link. advertising_campaign_registrations — регистрации через кампании (UNIQUE: campaign_id + user_id).

Опросы (5 таблиц)

Цепочка: polls -> poll_questions -> poll_options -> poll_answers. polls — опросы (title, reward_enabled, reward_amount_kopeks). poll_responses — участие пользователя в опросе (UNIQUE: poll_id + user_id, reward_given).

Колесо фортуны (3 таблицы)

wheel_configs — конфигурация колеса (rtp_percent, spin_cost_stars, daily_spin_limit). wheel_prizes — призы (prize_type: subscription_days/balance_bonus/traffic_gb/promocode/nothing, manual_probability). wheel_spins — история вращений (user_id, prize_id, payment_type, is_applied).

Серверы и тарифы (3 таблицы)

tariffs — тарифные планы (см. Управление тарифами). server_squads — серверные группы. squads — устаревшая таблица серверов (заменена на server_squads).

Новости (3 таблицы)

news_articles — статьи новостей. Индексы: slug (unique), composite is_published + published_at DESC, composite is_published + category, created_at, FK-индексы. news_categories — управляемые категории. news_tags — управляемые теги.

Системные и контентные (12 таблиц)

Вебхуки (2 таблицы)

webhooks — настройки вебхуков (url, secret, event_type, failure_count, success_count). webhook_deliveries — история доставок (status: pending/success/failed, attempt_number, next_retry_at).

Web API и Cabinet (2 таблицы)

web_api_tokens — API-ключи (token_hash UNIQUE, token_prefix, expires_at, is_active). button_click_logs — журнал кликов по кнопкам меню (аналитика).

Сводка по доменам