Игрок может развивать персонажа в чат-боте ВК, открывать интерактивное древо в браузере или VK Mini App — прогресс непрерывен и хранится в единой базе данных PostgreSQL.
Схема Таблиц Базы Данных (PostgreSQL):
-- Игровая сессия — снимок агрегата Character + GameSession
CREATE TABLE game_sessions (
player_id VARCHAR(128) PRIMARY KEY,
revision INT NOT NULL,
snapshot JSONB NOT NULL,
rest_expires_at TIMESTAMPTZ,
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- VK identity -> внутренний PlayerId
CREATE TABLE player_identities (
provider VARCHAR(32) NOT NULL,
subject VARCHAR(256) NOT NULL,
player_id VARCHAR(128) NOT NULL,
PRIMARY KEY (provider, subject),
UNIQUE (provider, player_id)
);
-- HttpOnly web-сеансы; хранится только SHA-256 токена
CREATE TABLE web_sessions (
session_hash CHAR(64) PRIMARY KEY,
player_id VARCHAR(128) NOT NULL,
expires_at TIMESTAMPTZ NOT NULL,
revoked_at TIMESTAMPTZ
);
-- Одноразовые ключи связки (/link)
CREATE TABLE sync_link_tokens (
token VARCHAR(16) PRIMARY KEY,
vk_user_id BIGINT NOT NULL,
player_id VARCHAR(128) NOT NULL,
expires_at TIMESTAMPTZ NOT NULL,
is_claimed BOOLEAN NOT NULL DEFAULT FALSE
);
Протокол Связки Аккаунтов:
- Запрос в ВК: Игрок пишет боту
/link в сообщения группы.
- Генерация токена: Бот создает одноразовый ключ
NAVIA-XXXX со сроком жизни 15 минут.
- Ввод в Веб-клиенте: Игрок нажимает кнопку «Синхронизация ВК/Веб» в шапке и вводит код.
- Слияние данных: Бэкенд связывает
vk_user_id с сессией браузера. Все изученные узлы и очки синхронизируются в реальном времени.
- Серверная валидация: При сохранении очков сервер проверяет связность графа от истока, уровень персонажа и блокировки подклассов.