SHA256
31 12 25
Сделал что бы запускалось. Поправил мелкие ошибки
This commit is contained in:
@@ -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` только один раз.
|
||||
Reference in New Issue
Block a user