# Структура БД SHiNE (кратко) ## Таблица `solana_users` Локальная копия данных о пользователях из Solana. Поля: - `login` (TEXT) — логин пользователя. - `loginId` (INTEGER, PK) — ID пользователя, основной ключ. - `bchId` (INTEGER) — ID блокчейна пользователя. - `pubkey0` (TEXT) — первый публичный ключ. - `pubkey1` (TEXT) — второй публичный ключ. - `bchLimit` (INTEGER, NULL) — произвольный лимит для пользователя (опционально). --- ## Таблица `active_sessions` Активные сессии пользователей (WebSocket/WSS + Web Push). Поля: - `sessionId` (INTEGER, PK) — ID сессии, генерируется приложением. - `session_pwd` (TEXT) — секрет/пароль сессии. - `loginId` (INTEGER, FK → solana_users.loginId) — владелец сессии. - `time_ms` (INTEGER) — время создания/активности сессии (мс от эпохи). - `pubkey_num` (INTEGER) — номер ключа пользователя, которым подписывались данные. - `push_endpoint` (TEXT, NULL) — endpoint Web Push. - `push_p256dh_key` (TEXT, NULL) — p256dh-ключ Web Push. - `push_auth_key` (TEXT, NULL) — auth-ключ Web Push. --- ## Таблица `users_params` Сохранённые параметры и состояния пользователя (например, до какого сообщения прочитана лента). Поля: - `loginId` (INTEGER, FK → solana_users.loginId) — пользователь. - `param` (TEXT) — имя параметра (ключ). - `bch_channel_id` (INTEGER, DEFAULT 0) — ID канала/ленты который просмотрен. - `value` (TEXT, NULL) — значение параметра (строка). - `time_ms` (INTEGER) — время последнего обновления (мс от эпохи). - `pubkey_num` (INTEGER) — номер ключа, которым подписано значение. - `signature` (TEXT, NULL) — подпись значения. Ограничения: - `UNIQUE(loginId, param)` — у одного пользователя каждый `param` только один раз.