Сделал что бы запускалось. Поправил мелкие ошибки
This commit is contained in:
AidarKC
2025-12-31 21:10:05 +03:00
parent 62ea49d1fc
commit f17d077f25
56 changed files with 424 additions and 873 deletions
@@ -1,53 +0,0 @@
package shine.db.dao;
import shine.db.SqliteDbController;
import shine.db.entities.BlockchainStateEntry;
import java.sql.*;
/**
* SolanaBlockchainsDAO — таблица блокчейнов пользователя.
*
* Сейчас физически это blockchain_state, потому что:
* - у одного login может быть несколько blockchainName
* - у каждого blockchainName свой blockchainKey и size_limit
*
* Правило:
* - методы с Connection НЕ закрывают соединение
* - методы без Connection сами открывают и закрывают соединение
*/
public final class SolanaBlockchainsDAO {
private static volatile SolanaBlockchainsDAO instance;
private final SqliteDbController db = SqliteDbController.getInstance();
private final BlockchainStateDAO stateDao = BlockchainStateDAO.getInstance();
private SolanaBlockchainsDAO() {}
public static SolanaBlockchainsDAO getInstance() {
if (instance == null) {
synchronized (SolanaBlockchainsDAO.class) {
if (instance == null) instance = new SolanaBlockchainsDAO();
}
}
return instance;
}
public BlockchainStateEntry getByBlockchainName(String blockchainName) throws SQLException {
return stateDao.getByBlockchainName(blockchainName);
}
public BlockchainStateEntry getByBlockchainName(Connection c, String blockchainName) throws SQLException {
return stateDao.getByBlockchainName(c, blockchainName);
}
/** Для HEADER: проверка, что blockchain_state существует и last_global_number=-1. */
public BlockchainStateEntry requireExistingAtGenesis(Connection c, String blockchainName) throws SQLException {
return stateDao.requireExistingAtGenesis(c, blockchainName);
}
/** Для добавления блока: атомарная проверка лимита + увеличение размера файла. */
public boolean tryIncreaseFileSizeWithinLimit(Connection c, String blockchainName, long deltaBytes, long nowMs) throws SQLException {
return stateDao.tryIncreaseFileSizeWithinLimit(c, blockchainName, deltaBytes, nowMs);
}
}
@@ -1,44 +0,0 @@
# Структура БД 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` только один раз.