Данное приложение - минималистичная платформа для обмена сообщениями в реальном времени.
- Доставка сообщений в реальном времени через WebSocket (Socket.IO).
- Безопасная аутентификация: краткоживущие JWT access‑токены и refresh‑токены, привязанные к сессиям и хранимые в быстрых хранилищах.
- Хранение истории и метаданных в реляционной базе с поддержкой транзакций и пагинации.
- Управление множественными сессиями пользователя с возможностью выборочной инвалидации и отслеживания онлайн‑статуса.
репозиторий: https://github.com/kennyzavr/chat-backend
-
Интерфейсы:
- REST API для синхронных операций (регистрация, авторизация, получение истории, CRUD для сущностей).
- WebSocket gateway для подписки на события (новое сообщение, уведомления, состояние пользователя).
-
Основные модули:
- Аутентификация: логин, подтверждение почты.
- Сессии и токены: генерация и валидация access/refresh токенов, хранение сессий в быстром хранилище.
- Пользователи: управление профилями, сопоставление сессий и socket‑подключений, статус онлайн/оффлайн.
- Сообщения и диалоги: доставка сообщений, история и пагинация.
-
Хранение данных:
- Долговременные данные — реляционная БД (Postgres).
- Эфемерные / быстрые данные (сессии, refresh‑токены, rate limits) — Redis.
репозиторий: https://github.com/kennyzavr/chat-frontend
-
Организация приложения:
- SPA‑клиент, разделённый на модули: авторизация, основной рабочий интерфейс, список диалогов, компоненты уведомлений.
- Централизованное управление состоянием для синхронизации данных между компонентами (стор/сервисный слой).
-
Сетевой слой:
- HTTP‑сервисы для работы с REST API (получение истории, отправка сообщений, операции пользователя).
- WS‑сервис для управления Socket.IO‑подключением, подписками и обработкой событий (включая логику повторного подключения и реавторизации).
-
Поведение клиента:
- При логине клиент сохраняет токены и инициирует WS‑соединение.
- Realtime‑события обновляют стор и UI, синхронизируя данные между вкладками/компонентами.
- При истечении access‑токена используется refresh‑flow для обновления и поддержания соединения.