Vibeapp - Архитектура проекта

Технологический стек

Level 1

flowchart LR

  Guest["Гость"]
  User["Зарегистрированный пользователь"]

  Support["Support"]
  Content["Контент-менеджер"]
  Moderator["Модератор"]
  Analyst["Аналитик"]

  Vibe["Vibeapp
Mobile App
Web App
Backend API
Admin Panel"]

  Ticketcloud["Ticketcloud
Primary ticketing
Каталог и первичная покупка"]

  TBank["T-Bank
Эквайринг вторичной продажи
Возвраты и фискализация"]

  Checkpoint["Checkpoint
СКД
Контроль доступа
Погашение билетов"]

  MTSID["MTS ID
OAuth авторизация"]

  Exolve["MTS Exolve
SMS"]

  Firebase["Firebase
FCM APNs Push"]

  Metrika["Yandex Metrika"]
  MyTracker["MyTracker"]
  Sentry["Sentry"]

  Storage["Yandex Object Storage
S3"]

  Guest --> Vibe
  User --> Vibe

  Support --> Vibe
  Content --> Vibe
  Moderator --> Vibe
  Analyst --> Vibe

  Vibe --> Ticketcloud
  Ticketcloud --> Vibe

  Vibe --> TBank
  TBank --> Vibe

  Vibe --> Checkpoint
  Checkpoint --> Vibe

  Vibe --> MTSID
  Vibe --> Exolve
  Vibe --> Firebase

  Vibe --> Metrika
  Vibe --> MyTracker
  Vibe --> Sentry

  Vibe --> Storage

Vibeapp — B2C система (Mobile App + Web App + Backend/API + Admin Panel), обеспечивающая:

  • первичную работу с билетами (через Ticketcloud)
  • передачу билетов,
  • вторичную перепродажу (через T-Bank эквайринг),
  • знакомства и общение (собственная реализация),
  • offline-first доступ с последующей синхронизацией.

Роли

  • Гость — просмотр/онбординг/старт регистрации.
  • Зарегистрированный пользователь — покупка/хранение/передача/перепродажа билетов, знакомства/чат, получение уведомлений.
  • Support / Контент-менеджер / Модератор / Аналитик — работают через Admin Panel.

Внешние системы и связи

Ticketcloud

  • TicketcloudVibeapp: мероприятия (каталог), билеты пользователя/данные билетов, статусы первичных операций.
  • VibeappTicketcloud: операции первичной покупки и возврата первички (обрабатываются в Ticketcloud), а также синхронизация ownership после операций, выполненных в Vibeapp.
  • Ownership flow: сначала меняется в Vibeapp, затем синхронизируется в Ticketcloud (включая передачу и перепродажу).

Checkpoint (СКД — система контроля доступа) Внешняя система контроля доступа на мероприятиях.

  • Vibeapp → Checkpoint: передача данных о смене владельца билета (передача или перепродажа, актуализация права доступа).
  • Checkpoint → Vibeapp: уведомления о погашении билета (факт прохода), используемые для обновления статуса билета внутри системы.

T-Bank (платежная система, вторичная продажа)

  • VibeappT-Bank: создание заказа/платежа для вторичной продажи (эквайринг), запросы на возвраты вторички, сверка, фискализация (если применимо).
  • T-BankVibeapp: подтверждения и webhooks статусов (платёж/возврат/фискализация).

MTS ID (OAuth)

  • VibeappMTS ID: авторизация пользователей по OAuth (на основе телефона/учётных данных провайдера).

MTS Exolve (SMS)

  • VibeappMTS Exolve: отправка SMS (OTP/сервисные сообщения).

Firebase (FCM/APNs)

  • VibeappFirebase: регистрация токенов устройств и отправка push payload.

Yandex Metrika / MyTracker

  • VibeappAnalytics: события приложения и продуктовые метрики.

Sentry

  • Vibeapp → Sentry: ошибки/логи/трейсы.

Yandex Object Storage (S3)

  • Vibeapp → Storage: хранение и выдача аватарок/медиа.

Границы системы

Внутри границы Vibeapp: mobile/web клиенты, backend/API, admin panel, чат/знакомства, логика передачи/вторичной продажи и смены ownership, offline-first и синхронизация.

Вне границы: Ticketcloud (первичка и возвраты первички + внешний реестр/синх ownership), Checkpoint (СКД), T-Bank (эквайринг вторички + возвраты/фискализация + webhooks), MTS ID/Exolve, Firebase, Metrika/MyTracker, Sentry, Yandex Storage.

Level 2

flowchart LR

  Guest["Гость"]
  User["Пользователь"]
  Ops["Support / Контент / Модерация / Аналитики"]

  Mobile["Mobile App
React Native
Offline DB
JWT"]
  WebApp["Web App
SPA
JWT"]
  AdminUI["Admin Panel
Web App
Admin Auth"]

  LB["Load Balancer / Reverse Proxy
Единственная внешняя точка входа
Проксирует только API"]

  API["API Service
Монолит
Public API и Admin API
Auth Users Tickets Marketplace Social Chat Notifications Integrations
Принимает webhooks T-Bank и Checkpoint"]

  Sockets["Sockets Service
Realtime
чат и события"]
  Streams["Streams Service
Kafka Streams
синхронизация с Ticketcloud"]
  Tasks["Tasks Service
Workers
RabbitMQ consumers"]

  PG["PostgreSQL"]
  Redis["Redis"]
  RMQ["RabbitMQ"]
  Kafka["Kafka"]

  Ticketcloud["Ticketcloud
Primary ticketing"]
  TBank["T-Bank
Эквайринг вторички
Webhooks"]
  Checkpoint["Checkpoint
СКД
Контроль доступа и погашение билетов"]

  MTSID["MTS ID"]
  Exolve["MTS Exolve"]
  Firebase["Firebase FCM APNs"]
  Storage["Yandex Object Storage S3"]
  Metrika["Yandex Metrika"]
  MyTracker["MyTracker"]
  Sentry["Sentry"]

  Guest --> Mobile
  User --> Mobile
  Guest --> WebApp
  User --> WebApp
  Ops --> AdminUI

  Mobile --> LB
  WebApp --> LB
  AdminUI --> LB

  LB --> API

  API --> PG
  API --> Redis
  API --> RMQ
  API --> Kafka
  API --> Sockets

  Sockets --> PG
  Sockets --> Redis

  Tasks --> RMQ
  Tasks --> PG
  Tasks --> Redis
  Tasks --> Ticketcloud
  Tasks --> TBank

  Streams --> Kafka
  Streams --> Ticketcloud
  Streams --> PG

  API --> Ticketcloud
  API --> TBank
  API --> Checkpoint

  Checkpoint --> API

  API --> MTSID
  API --> Exolve
  API --> Firebase
  API --> Storage

  Mobile --> Metrika
  Mobile --> MyTracker
  Mobile --> Sentry
  WebApp --> Sentry

  API --> Sentry
  Tasks --> Sentry
  Streams --> Sentry
  Sockets --> Sentry

Внешний доступ и сеть

Load Balancer / Reverse Proxy (traefik)

Единственная внешняя точка входа. Терминирует соединения и проксирует трафик только на API. Все остальные контейнеры находятся во внутреннем контуре и извне недоступны.

Клиентские контейнеры

Mobile App (React Native)

Клиент для iOS/Android с единым кодом. Реализует основные сценарии: билеты (хранение/передача/перепродажа), знакомства/чат, управление уведомлениями. Использует локальную БД и модель offline-first (кэширование + последующая синхронизация). Аутентификация по JWT.

Web App (SSR)

Пользовательский web-клиент, функционально близок к мобильному, но урезан. Работает через публичное API по JWT.

Admin Panel (Web App)

Отдельное web-приложение для внутренних ролей (support/контент/модерация/аналитика). Работает через отдельный Admin API и отдельный механизм аутентификации.

Серверные контейнеры

Public API Service (монолит)

Основной backend-сервис, наружу доступен через reverse proxy. Внутри логически разделён на модули:

  • Auth/Users (MTS ID OAuth, SMS OTP)
  • Tickets (ownership, передача, синхронизация с Ticketcloud)
  • Marketplace (вторичная продажа через T-Bank эквайринг)
  • Social/Chat (логика соц-фич)
  • Notifications (регистрация токенов, настройки категорий, отправка push)
  • Integrations (Ticketcloud, T-Bank и др.)

Сервис пишет в PostgreSQL, использует Redis для cache/lock, публикует фоновые задачи в RabbitMQ, работает с Kafka (события для stream-процессинга), инициирует realtime через Sockets.

Sockets Service (Realtime)

Контейнер для realtime-коммуникаций (чат/события/онлайн-обновления). Хранит состояние в PostgreSQL, использует Redis для быстрого доступа/координации.

Tasks Service (Workers)

Набор фоновых воркеров, потребляющих задачи из RabbitMQ. Обрабатывает асинхронные операции и ретраи, а также интеграционные действия (например, операции вторички, обработка статусов, фоновые синки). Пишет в PostgreSQL, использует Redis для lock/дедупликации.

Streams Service (Kafka Streams)

Stream-processing слой для интеграций и синхронизаций (в частности Ticketcloud). Читает/пишет события в Kafka, обновляет проекции/состояние в PostgreSQL.

Хранилища и инфраструктура данных

PostgreSQL (единая БД)

Основное хранилище данных: пользователи/профили, билеты и ownership, сделки вторички, чат/соц-данные, административные сущности.

Redis

Кэш и распределённые блокировки (cache + lock).

RabbitMQ

Очередь задач для фоновых процессов (workers).

Kafka Cluster

Топики событий для stream processing (Kafka Streams).

Внешние интеграции (вне контура)

Ticketcloud — первичная ticketing-система (каталог, первичная покупка и возврат первички, синк ownership).

Checkpoint (СКД — система контроля доступа) передача данных о смене владельца билета, получение информации о погашении билета

T-Bank — эквайринг вторички + возвраты/сверка/фискализация, webhooks статусов в backend.

MTS ID — OAuth-авторизация.

MTS Exolve — SMS (OTP).

Firebase FCM/APNs — push-инфраструктура.

Yandex Object Storage (S3) — медиа, запись только backend.

Yandex Metrika / MyTracker — аналитика (обычно из мобильного клиента).

Sentry — ошибки/логи со всех сервисов и клиентов.