19 12 25
Передел библиотеку работы с БД под только login и bchName
This commit is contained in:
parent
0c49cae055
commit
627321d4ae
@ -14,14 +14,13 @@ import java.sql.Statement;
|
|||||||
/**
|
/**
|
||||||
* DatabaseInitializer — создание новой SQLite-БД по схеме SHiNE.
|
* DatabaseInitializer — создание новой SQLite-БД по схеме SHiNE.
|
||||||
*
|
*
|
||||||
* Читает путь к файлу БД из application.properties (db.path),
|
* Таблицы:
|
||||||
* при необходимости удаляет старый файл и создаёт таблицы:
|
* - solana_users (login TEXT PK, bchName TEXT)
|
||||||
* - solana_users
|
* - active_sessions (login TEXT FK)
|
||||||
* - active_sessions
|
* - users_params (login TEXT FK, UNIQUE(login,param))
|
||||||
* - users_params
|
|
||||||
* - ip_geo_cache
|
* - ip_geo_cache
|
||||||
* - blockchain_state (MVP)
|
* - blockchain_state (MVP)
|
||||||
* - blocks
|
* - blocks (login TEXT, bchName TEXT, PK убран)
|
||||||
*/
|
*/
|
||||||
public class DatabaseInitializer {
|
public class DatabaseInitializer {
|
||||||
|
|
||||||
@ -81,9 +80,8 @@ public class DatabaseInitializer {
|
|||||||
// 1. solana_users
|
// 1. solana_users
|
||||||
st.executeUpdate("""
|
st.executeUpdate("""
|
||||||
CREATE TABLE IF NOT EXISTS solana_users (
|
CREATE TABLE IF NOT EXISTS solana_users (
|
||||||
login TEXT NOT NULL,
|
login TEXT NOT NULL PRIMARY KEY,
|
||||||
loginId INTEGER NOT NULL PRIMARY KEY,
|
bchName TEXT NOT NULL,
|
||||||
bchId INTEGER NOT NULL,
|
|
||||||
loginKey TEXT,
|
loginKey TEXT,
|
||||||
deviceKey TEXT,
|
deviceKey TEXT,
|
||||||
bchLimit INTEGER
|
bchLimit INTEGER
|
||||||
@ -99,7 +97,7 @@ public class DatabaseInitializer {
|
|||||||
st.executeUpdate("""
|
st.executeUpdate("""
|
||||||
CREATE TABLE IF NOT EXISTS active_sessions (
|
CREATE TABLE IF NOT EXISTS active_sessions (
|
||||||
sessionId TEXT NOT NULL PRIMARY KEY,
|
sessionId TEXT NOT NULL PRIMARY KEY,
|
||||||
loginId INTEGER NOT NULL,
|
login TEXT NOT NULL,
|
||||||
sessionPwd TEXT NOT NULL,
|
sessionPwd TEXT NOT NULL,
|
||||||
storagePwd TEXT NOT NULL,
|
storagePwd TEXT NOT NULL,
|
||||||
sessionCreatedAtMs INTEGER NOT NULL,
|
sessionCreatedAtMs INTEGER NOT NULL,
|
||||||
@ -111,33 +109,33 @@ public class DatabaseInitializer {
|
|||||||
clientInfoFromClient TEXT,
|
clientInfoFromClient TEXT,
|
||||||
clientInfoFromRequest TEXT,
|
clientInfoFromRequest TEXT,
|
||||||
userLanguage TEXT,
|
userLanguage TEXT,
|
||||||
FOREIGN KEY (loginId) REFERENCES solana_users(loginId)
|
FOREIGN KEY (login) REFERENCES solana_users(login)
|
||||||
);
|
);
|
||||||
""");
|
""");
|
||||||
|
|
||||||
st.executeUpdate("""
|
st.executeUpdate("""
|
||||||
CREATE INDEX IF NOT EXISTS idx_active_sessions_loginId
|
CREATE INDEX IF NOT EXISTS idx_active_sessions_login
|
||||||
ON active_sessions (loginId);
|
ON active_sessions (login);
|
||||||
""");
|
""");
|
||||||
|
|
||||||
// 3. users_params
|
// 3. users_params
|
||||||
st.executeUpdate("""
|
st.executeUpdate("""
|
||||||
CREATE TABLE IF NOT EXISTS users_params (
|
CREATE TABLE IF NOT EXISTS users_params (
|
||||||
loginId INTEGER NOT NULL,
|
login TEXT NOT NULL,
|
||||||
param TEXT NOT NULL,
|
param TEXT NOT NULL,
|
||||||
bch_channel_id INTEGER NOT NULL DEFAULT 0,
|
bch_channel_id INTEGER NOT NULL DEFAULT 0,
|
||||||
value TEXT,
|
value TEXT,
|
||||||
time_ms INTEGER NOT NULL,
|
time_ms INTEGER NOT NULL,
|
||||||
pubkey_num INTEGER NOT NULL,
|
pubkey_num INTEGER NOT NULL,
|
||||||
signature TEXT,
|
signature TEXT,
|
||||||
FOREIGN KEY (loginId) REFERENCES solana_users(loginId),
|
FOREIGN KEY (login) REFERENCES solana_users(login),
|
||||||
UNIQUE (loginId, param)
|
UNIQUE (login, param)
|
||||||
);
|
);
|
||||||
""");
|
""");
|
||||||
|
|
||||||
st.executeUpdate("""
|
st.executeUpdate("""
|
||||||
CREATE INDEX IF NOT EXISTS idx_users_params_loginId
|
CREATE INDEX IF NOT EXISTS idx_users_params_login
|
||||||
ON users_params (loginId);
|
ON users_params (login);
|
||||||
""");
|
""");
|
||||||
|
|
||||||
// 4. ip_geo_cache
|
// 4. ip_geo_cache
|
||||||
@ -154,8 +152,7 @@ public class DatabaseInitializer {
|
|||||||
ON ip_geo_cache (updated_at_ms);
|
ON ip_geo_cache (updated_at_ms);
|
||||||
""");
|
""");
|
||||||
|
|
||||||
// 5. blockchain_state (MVP)
|
// 5. blockchain_state (MVP) — оставляю как было (там уже user_login TEXT)
|
||||||
// TODO: позже можно вынести линии в отдельную таблицу blockchain_line_state и убрать "широкую" схему.
|
|
||||||
st.executeUpdate("""
|
st.executeUpdate("""
|
||||||
CREATE TABLE IF NOT EXISTS blockchain_state (
|
CREATE TABLE IF NOT EXISTS blockchain_state (
|
||||||
blockchain_id INTEGER NOT NULL PRIMARY KEY,
|
blockchain_id INTEGER NOT NULL PRIMARY KEY,
|
||||||
@ -201,11 +198,11 @@ public class DatabaseInitializer {
|
|||||||
ON blockchain_state (updated_at_ms);
|
ON blockchain_state (updated_at_ms);
|
||||||
""");
|
""");
|
||||||
|
|
||||||
// 6. blocks
|
// 6. blocks — PK удалён полностью
|
||||||
st.executeUpdate("""
|
st.executeUpdate("""
|
||||||
CREATE TABLE IF NOT EXISTS blocks (
|
CREATE TABLE IF NOT EXISTS blocks (
|
||||||
loginId INTEGER NOT NULL,
|
login TEXT NOT NULL,
|
||||||
blockchainId INTEGER NOT NULL,
|
bchName TEXT NOT NULL,
|
||||||
blockGlobalNumber INTEGER NOT NULL,
|
blockGlobalNumber INTEGER NOT NULL,
|
||||||
blockGlobalPreHashe TEXT NOT NULL,
|
blockGlobalPreHashe TEXT NOT NULL,
|
||||||
|
|
||||||
@ -217,28 +214,23 @@ public class DatabaseInitializer {
|
|||||||
|
|
||||||
blockByte BLOB,
|
blockByte BLOB,
|
||||||
|
|
||||||
toLoginId INTEGER NOT NULL,
|
to_login TEXT,
|
||||||
toBlockchainId INTEGER NOT NULL,
|
toBchName TEXT NOT NULL,
|
||||||
toBlockGlobalNumber INTEGER NOT NULL,
|
toBlockGlobalNumber INTEGER NOT NULL,
|
||||||
toBlockHashe TEXT NOT NULL,
|
toBlockHashe TEXT NOT NULL,
|
||||||
|
|
||||||
-- Выбранный PK (см. BlocksDAO)
|
FOREIGN KEY (login) REFERENCES solana_users(login)
|
||||||
PRIMARY KEY (loginId, blockchainId, blockGlobalNumber, blockLineIndex, blockLineNumber),
|
|
||||||
|
|
||||||
-- Связи (по желанию можно ослабить/убрать, если будут "частичные" данные)
|
|
||||||
FOREIGN KEY (loginId) REFERENCES solana_users(loginId)
|
|
||||||
);
|
);
|
||||||
""");
|
""");
|
||||||
|
|
||||||
// Индексы под типовые запросы: по цепочке/глобальному номеру и по "to*"
|
|
||||||
st.executeUpdate("""
|
st.executeUpdate("""
|
||||||
CREATE INDEX IF NOT EXISTS idx_blocks_chain_global
|
CREATE INDEX IF NOT EXISTS idx_blocks_chain_global
|
||||||
ON blocks (loginId, blockchainId, blockGlobalNumber);
|
ON blocks (login, bchName, blockGlobalNumber);
|
||||||
""");
|
""");
|
||||||
|
|
||||||
st.executeUpdate("""
|
st.executeUpdate("""
|
||||||
CREATE INDEX IF NOT EXISTS idx_blocks_to_target
|
CREATE INDEX IF NOT EXISTS idx_blocks_to_target
|
||||||
ON blocks (toLoginId, toBlockchainId, toBlockGlobalNumber);
|
ON blocks (to_login, toBchName, toBlockGlobalNumber);
|
||||||
""");
|
""");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,7 +37,7 @@ public final class ActiveSessionsDAO {
|
|||||||
String sql = """
|
String sql = """
|
||||||
INSERT INTO active_sessions (
|
INSERT INTO active_sessions (
|
||||||
sessionId,
|
sessionId,
|
||||||
loginId,
|
login,
|
||||||
sessionPwd,
|
sessionPwd,
|
||||||
storagePwd,
|
storagePwd,
|
||||||
sessionCreatedAtMs,
|
sessionCreatedAtMs,
|
||||||
@ -54,7 +54,7 @@ public final class ActiveSessionsDAO {
|
|||||||
|
|
||||||
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
||||||
ps.setString(1, session.getSessionId());
|
ps.setString(1, session.getSessionId());
|
||||||
ps.setLong(2, session.getLoginId());
|
ps.setString(2, session.getLogin());
|
||||||
ps.setString(3, session.getSessionPwd());
|
ps.setString(3, session.getSessionPwd());
|
||||||
ps.setString(4, session.getStoragePwd());
|
ps.setString(4, session.getStoragePwd());
|
||||||
ps.setLong(5, session.getSessionCreatedAtMs());
|
ps.setLong(5, session.getSessionCreatedAtMs());
|
||||||
@ -84,7 +84,7 @@ public final class ActiveSessionsDAO {
|
|||||||
String sql = """
|
String sql = """
|
||||||
SELECT
|
SELECT
|
||||||
sessionId,
|
sessionId,
|
||||||
loginId,
|
login,
|
||||||
sessionPwd,
|
sessionPwd,
|
||||||
storagePwd,
|
storagePwd,
|
||||||
sessionCreatedAtMs,
|
sessionCreatedAtMs,
|
||||||
@ -116,12 +116,12 @@ public final class ActiveSessionsDAO {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Получить список по loginId с внешним соединением. Соединение НЕ закрывает. */
|
/** Получить список по login с внешним соединением. Соединение НЕ закрывает. */
|
||||||
public List<ActiveSessionEntry> getByLoginId(Connection c, long loginId) throws SQLException {
|
public List<ActiveSessionEntry> getByLogin(Connection c, String login) throws SQLException {
|
||||||
String sql = """
|
String sql = """
|
||||||
SELECT
|
SELECT
|
||||||
sessionId,
|
sessionId,
|
||||||
loginId,
|
login,
|
||||||
sessionPwd,
|
sessionPwd,
|
||||||
storagePwd,
|
storagePwd,
|
||||||
sessionCreatedAtMs,
|
sessionCreatedAtMs,
|
||||||
@ -134,13 +134,13 @@ public final class ActiveSessionsDAO {
|
|||||||
clientInfoFromRequest,
|
clientInfoFromRequest,
|
||||||
userLanguage
|
userLanguage
|
||||||
FROM active_sessions
|
FROM active_sessions
|
||||||
WHERE loginId = ?
|
WHERE login = ?
|
||||||
""";
|
""";
|
||||||
|
|
||||||
List<ActiveSessionEntry> result = new ArrayList<>();
|
List<ActiveSessionEntry> result = new ArrayList<>();
|
||||||
|
|
||||||
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
||||||
ps.setLong(1, loginId);
|
ps.setString(1, login);
|
||||||
try (ResultSet rs = ps.executeQuery()) {
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
while (rs.next()) result.add(mapRow(rs));
|
while (rs.next()) result.add(mapRow(rs));
|
||||||
}
|
}
|
||||||
@ -149,10 +149,10 @@ public final class ActiveSessionsDAO {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Получить список по loginId без внешнего соединения. Сам открывает/закрывает. */
|
/** Получить список по login без внешнего соединения. Сам открывает/закрывает. */
|
||||||
public List<ActiveSessionEntry> getByLoginId(long loginId) throws SQLException {
|
public List<ActiveSessionEntry> getByLogin(String login) throws SQLException {
|
||||||
try (Connection c = db.getConnection()) {
|
try (Connection c = db.getConnection()) {
|
||||||
return getByLoginId(c, loginId);
|
return getByLogin(c, login);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,7 +250,7 @@ public final class ActiveSessionsDAO {
|
|||||||
|
|
||||||
private ActiveSessionEntry mapRow(ResultSet rs) throws SQLException {
|
private ActiveSessionEntry mapRow(ResultSet rs) throws SQLException {
|
||||||
String sessionId = rs.getString("sessionId");
|
String sessionId = rs.getString("sessionId");
|
||||||
long loginId = rs.getLong("loginId");
|
String login = rs.getString("login");
|
||||||
String sessionPwd = rs.getString("sessionPwd");
|
String sessionPwd = rs.getString("sessionPwd");
|
||||||
String storagePwd = rs.getString("storagePwd");
|
String storagePwd = rs.getString("storagePwd");
|
||||||
long sessionCreatedAtMs = rs.getLong("sessionCreatedAtMs");
|
long sessionCreatedAtMs = rs.getLong("sessionCreatedAtMs");
|
||||||
@ -265,7 +265,7 @@ public final class ActiveSessionsDAO {
|
|||||||
|
|
||||||
return new ActiveSessionEntry(
|
return new ActiveSessionEntry(
|
||||||
sessionId,
|
sessionId,
|
||||||
loginId,
|
login,
|
||||||
sessionPwd,
|
sessionPwd,
|
||||||
storagePwd,
|
storagePwd,
|
||||||
sessionCreatedAtMs,
|
sessionCreatedAtMs,
|
||||||
|
|||||||
@ -13,7 +13,7 @@ import java.sql.*;
|
|||||||
* - методы без Connection сами открывают и закрывают соединение
|
* - методы без Connection сами открывают и закрывают соединение
|
||||||
*
|
*
|
||||||
* Важно:
|
* Важно:
|
||||||
* - PRIMARY KEY: (loginId, blockchainId, blockGlobalNumber, blockLineIndex, blockLineNumber)
|
* - PRIMARY KEY удалён (временно), поэтому "upsert" сделан через UPDATE->INSERT.
|
||||||
*/
|
*/
|
||||||
public final class BlocksDAO {
|
public final class BlocksDAO {
|
||||||
|
|
||||||
@ -37,8 +37,8 @@ public final class BlocksDAO {
|
|||||||
public void insert(Connection c, BlockEntry e) throws SQLException {
|
public void insert(Connection c, BlockEntry e) throws SQLException {
|
||||||
String sql = """
|
String sql = """
|
||||||
INSERT INTO blocks (
|
INSERT INTO blocks (
|
||||||
loginId,
|
login,
|
||||||
blockchainId,
|
bchName,
|
||||||
blockGlobalNumber,
|
blockGlobalNumber,
|
||||||
blockGlobalPreHashe,
|
blockGlobalPreHashe,
|
||||||
blockLineIndex,
|
blockLineIndex,
|
||||||
@ -46,8 +46,8 @@ public final class BlocksDAO {
|
|||||||
blockLinePreHashe,
|
blockLinePreHashe,
|
||||||
msgType,
|
msgType,
|
||||||
blockByte,
|
blockByte,
|
||||||
toLoginId,
|
to_login,
|
||||||
toBlockchainId,
|
toBchName,
|
||||||
toBlockGlobalNumber,
|
toBlockGlobalNumber,
|
||||||
toBlockHashe
|
toBlockHashe
|
||||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||||
@ -66,45 +66,15 @@ public final class BlocksDAO {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------- UPSERT --------------------
|
// -------------------- UPSERT (UPDATE -> INSERT) --------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Сохранить (upsert) с внешним соединением. Соединение НЕ закрывает.
|
* Сохранить (условный upsert) с внешним соединением. Соединение НЕ закрывает.
|
||||||
* Если запись с таким PK уже есть — обновляем поля.
|
* Без PK/UNIQUE делаем: UPDATE по "ключевым" полям -> если 0 строк, то INSERT.
|
||||||
*/
|
*/
|
||||||
public void upsert(Connection c, BlockEntry e) throws SQLException {
|
public void upsert(Connection c, BlockEntry e) throws SQLException {
|
||||||
String sql = """
|
int updated = update(c, e);
|
||||||
INSERT INTO blocks (
|
if (updated == 0) insert(c, e);
|
||||||
loginId,
|
|
||||||
blockchainId,
|
|
||||||
blockGlobalNumber,
|
|
||||||
blockGlobalPreHashe,
|
|
||||||
blockLineIndex,
|
|
||||||
blockLineNumber,
|
|
||||||
blockLinePreHashe,
|
|
||||||
msgType,
|
|
||||||
blockByte,
|
|
||||||
toLoginId,
|
|
||||||
toBlockchainId,
|
|
||||||
toBlockGlobalNumber,
|
|
||||||
toBlockHashe
|
|
||||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
||||||
ON CONFLICT(loginId, blockchainId, blockGlobalNumber, blockLineIndex, blockLineNumber)
|
|
||||||
DO UPDATE SET
|
|
||||||
blockGlobalPreHashe = excluded.blockGlobalPreHashe,
|
|
||||||
blockLinePreHashe = excluded.blockLinePreHashe,
|
|
||||||
msgType = excluded.msgType,
|
|
||||||
blockByte = excluded.blockByte,
|
|
||||||
toLoginId = excluded.toLoginId,
|
|
||||||
toBlockchainId = excluded.toBlockchainId,
|
|
||||||
toBlockGlobalNumber = excluded.toBlockGlobalNumber,
|
|
||||||
toBlockHashe = excluded.toBlockHashe
|
|
||||||
""";
|
|
||||||
|
|
||||||
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
|
||||||
bindAll(ps, e);
|
|
||||||
ps.executeUpdate();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Сохранить (upsert) без внешнего соединения. Сам открывает/закрывает. */
|
/** Сохранить (upsert) без внешнего соединения. Сам открывает/закрывает. */
|
||||||
@ -116,18 +86,18 @@ public final class BlocksDAO {
|
|||||||
|
|
||||||
// -------------------- SELECT --------------------
|
// -------------------- SELECT --------------------
|
||||||
|
|
||||||
/** Получить блок по PK с внешним соединением. Соединение НЕ закрывает. */
|
/** Получить блок по "PK-подобному" набору полей с внешним соединением. Соединение НЕ закрывает. */
|
||||||
public BlockEntry getByPk(Connection c,
|
public BlockEntry getByPk(Connection c,
|
||||||
long loginId,
|
String login,
|
||||||
long blockchainId,
|
String bchName,
|
||||||
int blockGlobalNumber,
|
int blockGlobalNumber,
|
||||||
int blockLineIndex,
|
int blockLineIndex,
|
||||||
int blockLineNumber) throws SQLException {
|
int blockLineNumber) throws SQLException {
|
||||||
|
|
||||||
String sql = """
|
String sql = """
|
||||||
SELECT
|
SELECT
|
||||||
loginId,
|
login,
|
||||||
blockchainId,
|
bchName,
|
||||||
blockGlobalNumber,
|
blockGlobalNumber,
|
||||||
blockGlobalPreHashe,
|
blockGlobalPreHashe,
|
||||||
blockLineIndex,
|
blockLineIndex,
|
||||||
@ -135,22 +105,23 @@ public final class BlocksDAO {
|
|||||||
blockLinePreHashe,
|
blockLinePreHashe,
|
||||||
msgType,
|
msgType,
|
||||||
blockByte,
|
blockByte,
|
||||||
toLoginId,
|
to_login,
|
||||||
toBlockchainId,
|
toBchName,
|
||||||
toBlockGlobalNumber,
|
toBlockGlobalNumber,
|
||||||
toBlockHashe
|
toBlockHashe
|
||||||
FROM blocks
|
FROM blocks
|
||||||
WHERE
|
WHERE
|
||||||
loginId = ?
|
login = ?
|
||||||
AND blockchainId = ?
|
AND bchName = ?
|
||||||
AND blockGlobalNumber = ?
|
AND blockGlobalNumber = ?
|
||||||
AND blockLineIndex = ?
|
AND blockLineIndex = ?
|
||||||
AND blockLineNumber = ?
|
AND blockLineNumber = ?
|
||||||
|
LIMIT 1
|
||||||
""";
|
""";
|
||||||
|
|
||||||
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
||||||
ps.setLong(1, loginId);
|
ps.setString(1, login);
|
||||||
ps.setLong(2, blockchainId);
|
ps.setString(2, bchName);
|
||||||
ps.setInt(3, blockGlobalNumber);
|
ps.setInt(3, blockGlobalNumber);
|
||||||
ps.setInt(4, blockLineIndex);
|
ps.setInt(4, blockLineIndex);
|
||||||
ps.setInt(5, blockLineNumber);
|
ps.setInt(5, blockLineNumber);
|
||||||
@ -162,22 +133,22 @@ public final class BlocksDAO {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Получить блок по PK без внешнего соединения. Сам открывает/закрывает. */
|
/** Получить блок по "PK-подобному" набору полей без внешнего соединения. Сам открывает/закрывает. */
|
||||||
public BlockEntry getByPk(long loginId,
|
public BlockEntry getByPk(String login,
|
||||||
long blockchainId,
|
String bchName,
|
||||||
int blockGlobalNumber,
|
int blockGlobalNumber,
|
||||||
int blockLineIndex,
|
int blockLineIndex,
|
||||||
int blockLineNumber) throws SQLException {
|
int blockLineNumber) throws SQLException {
|
||||||
try (Connection c = db.getConnection()) {
|
try (Connection c = db.getConnection()) {
|
||||||
return getByPk(c, loginId, blockchainId, blockGlobalNumber, blockLineIndex, blockLineNumber);
|
return getByPk(c, login, bchName, blockGlobalNumber, blockLineIndex, blockLineNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------- UPDATE --------------------
|
// -------------------- UPDATE --------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обновить (строго UPDATE) по PK с внешним соединением. Соединение НЕ закрывает.
|
* Обновить (строго UPDATE) по "PK-подобному" набору полей с внешним соединением. Соединение НЕ закрывает.
|
||||||
* Если строки нет — updateCount будет 0.
|
* Может обновить >1 строк, если в таблице появились дубликаты.
|
||||||
*/
|
*/
|
||||||
public int update(Connection c, BlockEntry e) throws SQLException {
|
public int update(Connection c, BlockEntry e) throws SQLException {
|
||||||
String sql = """
|
String sql = """
|
||||||
@ -187,13 +158,13 @@ public final class BlocksDAO {
|
|||||||
blockLinePreHashe = ?,
|
blockLinePreHashe = ?,
|
||||||
msgType = ?,
|
msgType = ?,
|
||||||
blockByte = ?,
|
blockByte = ?,
|
||||||
toLoginId = ?,
|
to_login = ?,
|
||||||
toBlockchainId = ?,
|
toBchName = ?,
|
||||||
toBlockGlobalNumber = ?,
|
toBlockGlobalNumber = ?,
|
||||||
toBlockHashe = ?
|
toBlockHashe = ?
|
||||||
WHERE
|
WHERE
|
||||||
loginId = ?
|
login = ?
|
||||||
AND blockchainId = ?
|
AND bchName = ?
|
||||||
AND blockGlobalNumber = ?
|
AND blockGlobalNumber = ?
|
||||||
AND blockLineIndex = ?
|
AND blockLineIndex = ?
|
||||||
AND blockLineNumber = ?
|
AND blockLineNumber = ?
|
||||||
@ -210,13 +181,15 @@ public final class BlocksDAO {
|
|||||||
if (bytes != null) ps.setBytes(i++, bytes);
|
if (bytes != null) ps.setBytes(i++, bytes);
|
||||||
else ps.setNull(i++, Types.BLOB);
|
else ps.setNull(i++, Types.BLOB);
|
||||||
|
|
||||||
ps.setLong(i++, e.getToLoginId());
|
if (e.getToLogin() != null) ps.setString(i++, e.getToLogin());
|
||||||
ps.setInt(i++, e.getToBlockchainId());
|
else ps.setNull(i++, Types.VARCHAR);
|
||||||
|
|
||||||
|
ps.setString(i++, nn(e.getToBchName()));
|
||||||
ps.setInt(i++, e.getToBlockGlobalNumber());
|
ps.setInt(i++, e.getToBlockGlobalNumber());
|
||||||
ps.setString(i++, nn(e.getToBlockHashe()));
|
ps.setString(i++, nn(e.getToBlockHashe()));
|
||||||
|
|
||||||
ps.setLong(i++, e.getLoginId());
|
ps.setString(i++, e.getLogin());
|
||||||
ps.setLong(i++, e.getBlockchainId());
|
ps.setString(i++, e.getBchName());
|
||||||
ps.setInt(i++, e.getBlockGlobalNumber());
|
ps.setInt(i++, e.getBlockGlobalNumber());
|
||||||
ps.setInt(i++, e.getBlockLineIndex());
|
ps.setInt(i++, e.getBlockLineIndex());
|
||||||
ps.setInt(i++, e.getBlockLineNumber());
|
ps.setInt(i++, e.getBlockLineNumber());
|
||||||
@ -234,10 +207,13 @@ public final class BlocksDAO {
|
|||||||
|
|
||||||
// -------------------- DELETE --------------------
|
// -------------------- DELETE --------------------
|
||||||
|
|
||||||
/** Удалить по PK с внешним соединением. Соединение НЕ закрывает. */
|
/**
|
||||||
|
* Удалить по "PK-подобному" набору полей с внешним соединением. Соединение НЕ закрывает.
|
||||||
|
* Может удалить >1 строк, если есть дубликаты.
|
||||||
|
*/
|
||||||
public int deleteByPk(Connection c,
|
public int deleteByPk(Connection c,
|
||||||
long loginId,
|
String login,
|
||||||
long blockchainId,
|
String bchName,
|
||||||
int blockGlobalNumber,
|
int blockGlobalNumber,
|
||||||
int blockLineIndex,
|
int blockLineIndex,
|
||||||
int blockLineNumber) throws SQLException {
|
int blockLineNumber) throws SQLException {
|
||||||
@ -245,16 +221,16 @@ public final class BlocksDAO {
|
|||||||
String sql = """
|
String sql = """
|
||||||
DELETE FROM blocks
|
DELETE FROM blocks
|
||||||
WHERE
|
WHERE
|
||||||
loginId = ?
|
login = ?
|
||||||
AND blockchainId = ?
|
AND bchName = ?
|
||||||
AND blockGlobalNumber = ?
|
AND blockGlobalNumber = ?
|
||||||
AND blockLineIndex = ?
|
AND blockLineIndex = ?
|
||||||
AND blockLineNumber = ?
|
AND blockLineNumber = ?
|
||||||
""";
|
""";
|
||||||
|
|
||||||
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
||||||
ps.setLong(1, loginId);
|
ps.setString(1, login);
|
||||||
ps.setLong(2, blockchainId);
|
ps.setString(2, bchName);
|
||||||
ps.setInt(3, blockGlobalNumber);
|
ps.setInt(3, blockGlobalNumber);
|
||||||
ps.setInt(4, blockLineIndex);
|
ps.setInt(4, blockLineIndex);
|
||||||
ps.setInt(5, blockLineNumber);
|
ps.setInt(5, blockLineNumber);
|
||||||
@ -262,25 +238,25 @@ public final class BlocksDAO {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Удалить по PK без внешнего соединения. Сам открывает/закрывает. */
|
/** Удалить по "PK-подобному" набору полей без внешнего соединения. Сам открывает/закрывает. */
|
||||||
public int deleteByPk(long loginId,
|
public int deleteByPk(String login,
|
||||||
long blockchainId,
|
String bchName,
|
||||||
int blockGlobalNumber,
|
int blockGlobalNumber,
|
||||||
int blockLineIndex,
|
int blockLineIndex,
|
||||||
int blockLineNumber) throws SQLException {
|
int blockLineNumber) throws SQLException {
|
||||||
try (Connection c = db.getConnection()) {
|
try (Connection c = db.getConnection()) {
|
||||||
return deleteByPk(c, loginId, blockchainId, blockGlobalNumber, blockLineIndex, blockLineNumber);
|
return deleteByPk(c, login, bchName, blockGlobalNumber, blockLineIndex, blockLineNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------- INTERNAL --------------------
|
// -------------------- INTERNAL --------------------
|
||||||
|
|
||||||
/** Единая привязка параметров под INSERT/UPSERT — чтобы не разъезжалось. */
|
/** Единая привязка параметров под INSERT — чтобы не разъезжалось. */
|
||||||
private static void bindAll(PreparedStatement ps, BlockEntry e) throws SQLException {
|
private static void bindAll(PreparedStatement ps, BlockEntry e) throws SQLException {
|
||||||
int i = 1;
|
int i = 1;
|
||||||
|
|
||||||
ps.setLong(i++, e.getLoginId());
|
ps.setString(i++, e.getLogin());
|
||||||
ps.setLong(i++, e.getBlockchainId());
|
ps.setString(i++, e.getBchName());
|
||||||
ps.setInt(i++, e.getBlockGlobalNumber());
|
ps.setInt(i++, e.getBlockGlobalNumber());
|
||||||
ps.setString(i++, nn(e.getBlockGlobalPreHashe()));
|
ps.setString(i++, nn(e.getBlockGlobalPreHashe()));
|
||||||
|
|
||||||
@ -294,8 +270,10 @@ public final class BlocksDAO {
|
|||||||
if (bytes != null) ps.setBytes(i++, bytes);
|
if (bytes != null) ps.setBytes(i++, bytes);
|
||||||
else ps.setNull(i++, Types.BLOB);
|
else ps.setNull(i++, Types.BLOB);
|
||||||
|
|
||||||
ps.setLong(i++, e.getToLoginId());
|
if (e.getToLogin() != null) ps.setString(i++, e.getToLogin());
|
||||||
ps.setInt(i++, e.getToBlockchainId());
|
else ps.setNull(i++, Types.VARCHAR);
|
||||||
|
|
||||||
|
ps.setString(i++, nn(e.getToBchName()));
|
||||||
ps.setInt(i++, e.getToBlockGlobalNumber());
|
ps.setInt(i++, e.getToBlockGlobalNumber());
|
||||||
ps.setString(i++, nn(e.getToBlockHashe()));
|
ps.setString(i++, nn(e.getToBlockHashe()));
|
||||||
}
|
}
|
||||||
@ -303,8 +281,8 @@ public final class BlocksDAO {
|
|||||||
private BlockEntry mapRow(ResultSet rs) throws SQLException {
|
private BlockEntry mapRow(ResultSet rs) throws SQLException {
|
||||||
BlockEntry e = new BlockEntry();
|
BlockEntry e = new BlockEntry();
|
||||||
|
|
||||||
e.setLoginId(rs.getLong("loginId"));
|
e.setLogin(rs.getString("login"));
|
||||||
e.setBlockchainId(rs.getLong("blockchainId"));
|
e.setBchName(rs.getString("bchName"));
|
||||||
e.setBlockGlobalNumber(rs.getInt("blockGlobalNumber"));
|
e.setBlockGlobalNumber(rs.getInt("blockGlobalNumber"));
|
||||||
e.setBlockGlobalPreHashe(rs.getString("blockGlobalPreHashe"));
|
e.setBlockGlobalPreHashe(rs.getString("blockGlobalPreHashe"));
|
||||||
|
|
||||||
@ -316,8 +294,8 @@ public final class BlocksDAO {
|
|||||||
|
|
||||||
e.setBlockByte(rs.getBytes("blockByte"));
|
e.setBlockByte(rs.getBytes("blockByte"));
|
||||||
|
|
||||||
e.setToLoginId(rs.getLong("toLoginId"));
|
e.setToLogin(rs.getString("to_login"));
|
||||||
e.setToBlockchainId(rs.getInt("toBlockchainId"));
|
e.setToBchName(rs.getString("toBchName"));
|
||||||
e.setToBlockGlobalNumber(rs.getInt("toBlockGlobalNumber"));
|
e.setToBlockGlobalNumber(rs.getInt("toBlockGlobalNumber"));
|
||||||
e.setToBlockHashe(rs.getString("toBlockHashe"));
|
e.setToBlockHashe(rs.getString("toBlockHashe"));
|
||||||
|
|
||||||
|
|||||||
@ -11,16 +11,15 @@ import java.util.List;
|
|||||||
* SolanaUsersDAO — локальная таблица пользователей из Solana.
|
* SolanaUsersDAO — локальная таблица пользователей из Solana.
|
||||||
*
|
*
|
||||||
* Колонки:
|
* Колонки:
|
||||||
* - login TEXT
|
* - login TEXT (PK)
|
||||||
* - loginId INTEGER (PK)
|
* - bchName TEXT
|
||||||
* - bchId INTEGER
|
|
||||||
* - loginKey TEXT
|
* - loginKey TEXT
|
||||||
* - deviceKey TEXT
|
* - deviceKey TEXT
|
||||||
* - bchLimit INTEGER (может быть NULL)
|
* - bchLimit INTEGER (может быть NULL)
|
||||||
*
|
*
|
||||||
* * Правило:
|
* Правило:
|
||||||
* * - методы с Connection НЕ закрывают соединение
|
* - методы с Connection НЕ закрывают соединение
|
||||||
* * - методы без Connection сами открывают и закрывают соединение
|
* - методы без Connection сами открывают и закрывают соединение
|
||||||
*/
|
*/
|
||||||
public final class SolanaUsersDAO {
|
public final class SolanaUsersDAO {
|
||||||
|
|
||||||
@ -43,22 +42,18 @@ public final class SolanaUsersDAO {
|
|||||||
/** Вставка с внешним соединением. Соединение НЕ закрывает. */
|
/** Вставка с внешним соединением. Соединение НЕ закрывает. */
|
||||||
public void insert(Connection c, SolanaUserEntry user) throws SQLException {
|
public void insert(Connection c, SolanaUserEntry user) throws SQLException {
|
||||||
String sql = """
|
String sql = """
|
||||||
INSERT INTO solana_users (login, loginId, bchId, loginKey, deviceKey, bchLimit)
|
INSERT INTO solana_users (login, bchName, loginKey, deviceKey, bchLimit)
|
||||||
VALUES (?, ?, ?, ?, ?, ?)
|
VALUES (?, ?, ?, ?, ?)
|
||||||
""";
|
""";
|
||||||
|
|
||||||
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
||||||
ps.setString(1, user.getLogin());
|
ps.setString(1, user.getLogin());
|
||||||
ps.setLong(2, user.getLoginId());
|
ps.setString(2, user.getBchName());
|
||||||
ps.setLong(3, user.getBchId());
|
ps.setString(3, user.getLoginKey());
|
||||||
ps.setString(4, user.getLoginKey());
|
ps.setString(4, user.getDeviceKey());
|
||||||
ps.setString(5, user.getDeviceKey());
|
|
||||||
|
|
||||||
if (user.getBchLimit() != null) {
|
if (user.getBchLimit() != null) ps.setInt(5, user.getBchLimit());
|
||||||
ps.setInt(6, user.getBchLimit());
|
else ps.setNull(5, Types.INTEGER);
|
||||||
} else {
|
|
||||||
ps.setNull(6, Types.INTEGER);
|
|
||||||
}
|
|
||||||
|
|
||||||
ps.executeUpdate();
|
ps.executeUpdate();
|
||||||
}
|
}
|
||||||
@ -73,34 +68,10 @@ public final class SolanaUsersDAO {
|
|||||||
|
|
||||||
// -------------------- SELECT --------------------
|
// -------------------- SELECT --------------------
|
||||||
|
|
||||||
/** Получить по loginId с внешним соединением. Соединение НЕ закрывает. */
|
|
||||||
public SolanaUserEntry getByLoginId(Connection c, long loginId) throws SQLException {
|
|
||||||
String sql = """
|
|
||||||
SELECT login, loginId, bchId, loginKey, deviceKey, bchLimit
|
|
||||||
FROM solana_users
|
|
||||||
WHERE loginId = ?
|
|
||||||
""";
|
|
||||||
|
|
||||||
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
|
||||||
ps.setLong(1, loginId);
|
|
||||||
try (ResultSet rs = ps.executeQuery()) {
|
|
||||||
if (!rs.next()) return null;
|
|
||||||
return mapRow(rs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Получить по loginId без внешнего соединения. Сам открывает/закрывает. */
|
|
||||||
public SolanaUserEntry getByLoginId(long loginId) throws SQLException {
|
|
||||||
try (Connection c = db.getConnection()) {
|
|
||||||
return getByLoginId(c, loginId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Получить по login (case-insensitive) с внешним соединением. Соединение НЕ закрывает. */
|
/** Получить по login (case-insensitive) с внешним соединением. Соединение НЕ закрывает. */
|
||||||
public SolanaUserEntry getByLogin(Connection c, String login) throws SQLException {
|
public SolanaUserEntry getByLogin(Connection c, String login) throws SQLException {
|
||||||
String sql = """
|
String sql = """
|
||||||
SELECT login, loginId, bchId, loginKey, deviceKey, bchLimit
|
SELECT login, bchName, loginKey, deviceKey, bchLimit
|
||||||
FROM solana_users
|
FROM solana_users
|
||||||
WHERE LOWER(login) = LOWER(?)
|
WHERE LOWER(login) = LOWER(?)
|
||||||
""";
|
""";
|
||||||
@ -124,7 +95,7 @@ public final class SolanaUsersDAO {
|
|||||||
/** Поиск по префиксу с внешним соединением. Соединение НЕ закрывает. */
|
/** Поиск по префиксу с внешним соединением. Соединение НЕ закрывает. */
|
||||||
public List<SolanaUserEntry> searchByLoginPrefix(Connection c, String prefix) throws SQLException {
|
public List<SolanaUserEntry> searchByLoginPrefix(Connection c, String prefix) throws SQLException {
|
||||||
String sql = """
|
String sql = """
|
||||||
SELECT login, loginId, bchId, loginKey, deviceKey, bchLimit
|
SELECT login, bchName, loginKey, deviceKey, bchLimit
|
||||||
FROM solana_users
|
FROM solana_users
|
||||||
WHERE LOWER(login) LIKE ?
|
WHERE LOWER(login) LIKE ?
|
||||||
ORDER BY login
|
ORDER BY login
|
||||||
@ -154,9 +125,8 @@ public final class SolanaUsersDAO {
|
|||||||
|
|
||||||
private SolanaUserEntry mapRow(ResultSet rs) throws SQLException {
|
private SolanaUserEntry mapRow(ResultSet rs) throws SQLException {
|
||||||
return new SolanaUserEntry(
|
return new SolanaUserEntry(
|
||||||
rs.getLong("loginId"),
|
|
||||||
rs.getString("login"),
|
rs.getString("login"),
|
||||||
rs.getLong("bchId"),
|
rs.getString("bchName"),
|
||||||
rs.getString("loginKey"),
|
rs.getString("loginKey"),
|
||||||
rs.getString("deviceKey"),
|
rs.getString("deviceKey"),
|
||||||
rs.getObject("bchLimit") != null ? rs.getInt("bchLimit") : null
|
rs.getObject("bchLimit") != null ? rs.getInt("bchLimit") : null
|
||||||
|
|||||||
@ -30,7 +30,7 @@ public final class UserParamsDAO {
|
|||||||
public void upsert(Connection c, UserParamEntry param) throws SQLException {
|
public void upsert(Connection c, UserParamEntry param) throws SQLException {
|
||||||
String sql = """
|
String sql = """
|
||||||
INSERT INTO users_params (
|
INSERT INTO users_params (
|
||||||
loginId,
|
login,
|
||||||
param,
|
param,
|
||||||
bch_channel_id,
|
bch_channel_id,
|
||||||
value,
|
value,
|
||||||
@ -38,7 +38,7 @@ public final class UserParamsDAO {
|
|||||||
pubkey_num,
|
pubkey_num,
|
||||||
signature
|
signature
|
||||||
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||||
ON CONFLICT(loginId, param)
|
ON CONFLICT(login, param)
|
||||||
DO UPDATE SET
|
DO UPDATE SET
|
||||||
bch_channel_id = excluded.bch_channel_id,
|
bch_channel_id = excluded.bch_channel_id,
|
||||||
value = excluded.value,
|
value = excluded.value,
|
||||||
@ -48,7 +48,7 @@ public final class UserParamsDAO {
|
|||||||
""";
|
""";
|
||||||
|
|
||||||
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
||||||
ps.setLong(1, param.getLoginId());
|
ps.setString(1, param.getLogin());
|
||||||
ps.setString(2, param.getParam());
|
ps.setString(2, param.getParam());
|
||||||
ps.setLong(3, param.getBchChannelId());
|
ps.setLong(3, param.getBchChannelId());
|
||||||
ps.setString(4, param.getValue());
|
ps.setString(4, param.getValue());
|
||||||
@ -69,10 +69,10 @@ public final class UserParamsDAO {
|
|||||||
// -------------------- SELECT --------------------
|
// -------------------- SELECT --------------------
|
||||||
|
|
||||||
/** Получить параметр с внешним соединением. Соединение НЕ закрывает. */
|
/** Получить параметр с внешним соединением. Соединение НЕ закрывает. */
|
||||||
public UserParamEntry getByUserIdAndParam(Connection c, long loginId, String paramName) throws SQLException {
|
public UserParamEntry getByUserLoginAndParam(Connection c, String login, String paramName) throws SQLException {
|
||||||
String sql = """
|
String sql = """
|
||||||
SELECT
|
SELECT
|
||||||
loginId,
|
login,
|
||||||
param,
|
param,
|
||||||
bch_channel_id,
|
bch_channel_id,
|
||||||
value,
|
value,
|
||||||
@ -80,11 +80,11 @@ public final class UserParamsDAO {
|
|||||||
pubkey_num,
|
pubkey_num,
|
||||||
signature
|
signature
|
||||||
FROM users_params
|
FROM users_params
|
||||||
WHERE loginId = ? AND param = ?
|
WHERE login = ? AND param = ?
|
||||||
""";
|
""";
|
||||||
|
|
||||||
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
||||||
ps.setLong(1, loginId);
|
ps.setString(1, login);
|
||||||
ps.setString(2, paramName);
|
ps.setString(2, paramName);
|
||||||
try (ResultSet rs = ps.executeQuery()) {
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
if (!rs.next()) return null;
|
if (!rs.next()) return null;
|
||||||
@ -94,17 +94,17 @@ public final class UserParamsDAO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Получить параметр без внешнего соединения. Сам открывает/закрывает. */
|
/** Получить параметр без внешнего соединения. Сам открывает/закрывает. */
|
||||||
public UserParamEntry getByUserIdAndParam(long loginId, String paramName) throws SQLException {
|
public UserParamEntry getByUserLoginAndParam(String login, String paramName) throws SQLException {
|
||||||
try (Connection c = db.getConnection()) {
|
try (Connection c = db.getConnection()) {
|
||||||
return getByUserIdAndParam(c, loginId, paramName);
|
return getByUserLoginAndParam(c, login, paramName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Получить все параметры пользователя с внешним соединением. Соединение НЕ закрывает. */
|
/** Получить все параметры пользователя с внешним соединением. Соединение НЕ закрывает. */
|
||||||
public List<UserParamEntry> getByUserId(Connection c, long loginId) throws SQLException {
|
public List<UserParamEntry> getByUserLogin(Connection c, String login) throws SQLException {
|
||||||
String sql = """
|
String sql = """
|
||||||
SELECT
|
SELECT
|
||||||
loginId,
|
login,
|
||||||
param,
|
param,
|
||||||
bch_channel_id,
|
bch_channel_id,
|
||||||
value,
|
value,
|
||||||
@ -112,14 +112,14 @@ public final class UserParamsDAO {
|
|||||||
pubkey_num,
|
pubkey_num,
|
||||||
signature
|
signature
|
||||||
FROM users_params
|
FROM users_params
|
||||||
WHERE loginId = ?
|
WHERE login = ?
|
||||||
ORDER BY time_ms DESC
|
ORDER BY time_ms DESC
|
||||||
""";
|
""";
|
||||||
|
|
||||||
List<UserParamEntry> result = new ArrayList<>();
|
List<UserParamEntry> result = new ArrayList<>();
|
||||||
|
|
||||||
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
||||||
ps.setLong(1, loginId);
|
ps.setString(1, login);
|
||||||
try (ResultSet rs = ps.executeQuery()) {
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
while (rs.next()) result.add(mapRow(rs));
|
while (rs.next()) result.add(mapRow(rs));
|
||||||
}
|
}
|
||||||
@ -129,9 +129,9 @@ public final class UserParamsDAO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Получить все параметры пользователя без внешнего соединения. Сам открывает/закрывает. */
|
/** Получить все параметры пользователя без внешнего соединения. Сам открывает/закрывает. */
|
||||||
public List<UserParamEntry> getByUserId(long loginId) throws SQLException {
|
public List<UserParamEntry> getByUserLogin(String login) throws SQLException {
|
||||||
try (Connection c = db.getConnection()) {
|
try (Connection c = db.getConnection()) {
|
||||||
return getByUserId(c, loginId);
|
return getByUserLogin(c, login);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ public final class UserParamsDAO {
|
|||||||
|
|
||||||
private UserParamEntry mapRow(ResultSet rs) throws SQLException {
|
private UserParamEntry mapRow(ResultSet rs) throws SQLException {
|
||||||
return new UserParamEntry(
|
return new UserParamEntry(
|
||||||
rs.getLong("loginId"),
|
rs.getString("login"),
|
||||||
rs.getString("param"),
|
rs.getString("param"),
|
||||||
rs.getLong("bch_channel_id"),
|
rs.getLong("bch_channel_id"),
|
||||||
rs.getString("value"),
|
rs.getString("value"),
|
||||||
|
|||||||
@ -3,27 +3,13 @@ package shine.db.entities;
|
|||||||
/**
|
/**
|
||||||
* Модель активной сессии (таблица active_sessions).
|
* Модель активной сессии (таблица active_sessions).
|
||||||
*
|
*
|
||||||
* CREATE TABLE active_sessions (
|
* Теперь вместо loginId:
|
||||||
* sessionId TEXT NOT NULL PRIMARY KEY,
|
* - login TEXT NOT NULL (FK -> solana_users(login))
|
||||||
* loginId INTEGER NOT NULL,
|
|
||||||
* sessionPwd TEXT NOT NULL,
|
|
||||||
* storagePwd TEXT NOT NULL,
|
|
||||||
* sessionCreatedAtMs INTEGER NOT NULL,
|
|
||||||
* lastAuthirificatedAtMs INTEGER NOT NULL,
|
|
||||||
* pushEndpoint TEXT,
|
|
||||||
* pushP256dhKey TEXT,
|
|
||||||
* pushAuthKey TEXT,
|
|
||||||
* clientIp TEXT,
|
|
||||||
* clientInfoFromClient TEXT,
|
|
||||||
* clientInfoFromRequest TEXT,
|
|
||||||
* userLanguage TEXT,
|
|
||||||
* FOREIGN KEY (loginId) REFERENCES solana_users(loginId)
|
|
||||||
* );
|
|
||||||
*/
|
*/
|
||||||
public class ActiveSessionEntry {
|
public class ActiveSessionEntry {
|
||||||
|
|
||||||
private String sessionId; // TEXT base64(32 bytes)
|
private String sessionId; // TEXT base64(32 bytes)
|
||||||
private long loginId; // INTEGER
|
private String login; // TEXT NOT NULL
|
||||||
private String sessionPwd; // TEXT
|
private String sessionPwd; // TEXT
|
||||||
private String storagePwd; // TEXT
|
private String storagePwd; // TEXT
|
||||||
private long sessionCreatedAtMs; // INTEGER
|
private long sessionCreatedAtMs; // INTEGER
|
||||||
@ -42,7 +28,7 @@ public class ActiveSessionEntry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ActiveSessionEntry(String sessionId,
|
public ActiveSessionEntry(String sessionId,
|
||||||
long loginId,
|
String login,
|
||||||
String sessionPwd,
|
String sessionPwd,
|
||||||
String storagePwd,
|
String storagePwd,
|
||||||
long sessionCreatedAtMs,
|
long sessionCreatedAtMs,
|
||||||
@ -55,7 +41,7 @@ public class ActiveSessionEntry {
|
|||||||
String clientInfoFromRequest,
|
String clientInfoFromRequest,
|
||||||
String userLanguage) {
|
String userLanguage) {
|
||||||
this.sessionId = sessionId;
|
this.sessionId = sessionId;
|
||||||
this.loginId = loginId;
|
this.login = login;
|
||||||
this.sessionPwd = sessionPwd;
|
this.sessionPwd = sessionPwd;
|
||||||
this.storagePwd = storagePwd;
|
this.storagePwd = storagePwd;
|
||||||
this.sessionCreatedAtMs = sessionCreatedAtMs;
|
this.sessionCreatedAtMs = sessionCreatedAtMs;
|
||||||
@ -69,109 +55,42 @@ public class ActiveSessionEntry {
|
|||||||
this.userLanguage = userLanguage;
|
this.userLanguage = userLanguage;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- getters / setters ---
|
public String getSessionId() { return sessionId; }
|
||||||
|
public void setSessionId(String sessionId) { this.sessionId = sessionId; }
|
||||||
|
|
||||||
public String getSessionId() {
|
public String getLogin() { return login; }
|
||||||
return sessionId;
|
public void setLogin(String login) { this.login = login; }
|
||||||
}
|
|
||||||
|
|
||||||
public void setSessionId(String sessionId) {
|
public String getSessionPwd() { return sessionPwd; }
|
||||||
this.sessionId = sessionId;
|
public void setSessionPwd(String sessionPwd) { this.sessionPwd = sessionPwd; }
|
||||||
}
|
|
||||||
|
|
||||||
public long getLoginId() {
|
public String getStoragePwd() { return storagePwd; }
|
||||||
return loginId;
|
public void setStoragePwd(String storagePwd) { this.storagePwd = storagePwd; }
|
||||||
}
|
|
||||||
|
|
||||||
public void setLoginId(long loginId) {
|
public long getSessionCreatedAtMs() { return sessionCreatedAtMs; }
|
||||||
this.loginId = loginId;
|
public void setSessionCreatedAtMs(long sessionCreatedAtMs) { this.sessionCreatedAtMs = sessionCreatedAtMs; }
|
||||||
}
|
|
||||||
|
|
||||||
public String getSessionPwd() {
|
public long getLastAuthirificatedAtMs() { return lastAuthirificatedAtMs; }
|
||||||
return sessionPwd;
|
public void setLastAuthirificatedAtMs(long lastAuthirificatedAtMs) { this.lastAuthirificatedAtMs = lastAuthirificatedAtMs; }
|
||||||
}
|
|
||||||
|
|
||||||
public void setSessionPwd(String sessionPwd) {
|
public String getPushEndpoint() { return pushEndpoint; }
|
||||||
this.sessionPwd = sessionPwd;
|
public void setPushEndpoint(String pushEndpoint) { this.pushEndpoint = pushEndpoint; }
|
||||||
}
|
|
||||||
|
|
||||||
public String getStoragePwd() {
|
public String getPushP256dhKey() { return pushP256dhKey; }
|
||||||
return storagePwd;
|
public void setPushP256dhKey(String pushP256dhKey) { this.pushP256dhKey = pushP256dhKey; }
|
||||||
}
|
|
||||||
|
|
||||||
public void setStoragePwd(String storagePwd) {
|
public String getPushAuthKey() { return pushAuthKey; }
|
||||||
this.storagePwd = storagePwd;
|
public void setPushAuthKey(String pushAuthKey) { this.pushAuthKey = pushAuthKey; }
|
||||||
}
|
|
||||||
|
|
||||||
public long getSessionCreatedAtMs() {
|
public String getClientIp() { return clientIp; }
|
||||||
return sessionCreatedAtMs;
|
public void setClientIp(String clientIp) { this.clientIp = clientIp; }
|
||||||
}
|
|
||||||
|
|
||||||
public void setSessionCreatedAtMs(long sessionCreatedAtMs) {
|
public String getClientInfoFromClient() { return clientInfoFromClient; }
|
||||||
this.sessionCreatedAtMs = sessionCreatedAtMs;
|
public void setClientInfoFromClient(String clientInfoFromClient) { this.clientInfoFromClient = clientInfoFromClient; }
|
||||||
}
|
|
||||||
|
|
||||||
public long getLastAuthirificatedAtMs() {
|
public String getClientInfoFromRequest() { return clientInfoFromRequest; }
|
||||||
return lastAuthirificatedAtMs;
|
public void setClientInfoFromRequest(String clientInfoFromRequest) { this.clientInfoFromRequest = clientInfoFromRequest; }
|
||||||
}
|
|
||||||
|
|
||||||
public void setLastAuthirificatedAtMs(long lastAuthirificatedAtMs) {
|
public String getUserLanguage() { return userLanguage; }
|
||||||
this.lastAuthirificatedAtMs = lastAuthirificatedAtMs;
|
public void setUserLanguage(String userLanguage) { this.userLanguage = userLanguage; }
|
||||||
}
|
|
||||||
|
|
||||||
public String getPushEndpoint() {
|
|
||||||
return pushEndpoint;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPushEndpoint(String pushEndpoint) {
|
|
||||||
this.pushEndpoint = pushEndpoint;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPushP256dhKey() {
|
|
||||||
return pushP256dhKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPushP256dhKey(String pushP256dhKey) {
|
|
||||||
this.pushP256dhKey = pushP256dhKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPushAuthKey() {
|
|
||||||
return pushAuthKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPushAuthKey(String pushAuthKey) {
|
|
||||||
this.pushAuthKey = pushAuthKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getClientIp() {
|
|
||||||
return clientIp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setClientIp(String clientIp) {
|
|
||||||
this.clientIp = clientIp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getClientInfoFromClient() {
|
|
||||||
return clientInfoFromClient;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setClientInfoFromClient(String clientInfoFromClient) {
|
|
||||||
this.clientInfoFromClient = clientInfoFromClient;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getClientInfoFromRequest() {
|
|
||||||
return clientInfoFromRequest;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setClientInfoFromRequest(String clientInfoFromRequest) {
|
|
||||||
this.clientInfoFromRequest = clientInfoFromRequest;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUserLanguage() {
|
|
||||||
return userLanguage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUserLanguage(String userLanguage) {
|
|
||||||
this.userLanguage = userLanguage;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -3,22 +3,19 @@ package shine.db.entities;
|
|||||||
/**
|
/**
|
||||||
* Запись блока (таблица blocks).
|
* Запись блока (таблица blocks).
|
||||||
*
|
*
|
||||||
* Идея:
|
* Теперь:
|
||||||
* - Храним и "глобальную" позицию (blockGlobalNumber + blockGlobalPreHashe),
|
* - login TEXT NOT NULL
|
||||||
* и "линейную" позицию (blockLineIndex + blockLineNumber + blockLinePreHashe),
|
* - bchName TEXT NOT NULL (идёт сразу после login)
|
||||||
* плюс полезные поля маршрутизации (to*).
|
* - to_login TEXT nullable
|
||||||
|
* - toBchName TEXT NOT NULL (идёт сразу после to_login)
|
||||||
*
|
*
|
||||||
* В БД:
|
* PRIMARY KEY пока убран вообще.
|
||||||
* - int64 -> INTEGER (Java long)
|
|
||||||
* - int32 -> INTEGER (Java int)
|
|
||||||
* - int16 -> INTEGER (Java int/short)
|
|
||||||
* - bytes -> BLOB (Java byte[])
|
|
||||||
* - hashes -> TEXT
|
|
||||||
*/
|
*/
|
||||||
public class BlockEntry {
|
public class BlockEntry {
|
||||||
|
|
||||||
private long loginId; // int64
|
private String login; // TEXT
|
||||||
private long blockchainId; // int64
|
private String bchName; // TEXT
|
||||||
|
|
||||||
private int blockGlobalNumber; // int32
|
private int blockGlobalNumber; // int32
|
||||||
private String blockGlobalPreHashe; // TEXT
|
private String blockGlobalPreHashe; // TEXT
|
||||||
|
|
||||||
@ -30,15 +27,15 @@ public class BlockEntry {
|
|||||||
|
|
||||||
private byte[] blockByte; // BLOB
|
private byte[] blockByte; // BLOB
|
||||||
|
|
||||||
private long toLoginId; // int64
|
private String toLogin; // TEXT nullable
|
||||||
private int toBlockchainId; // int32
|
private String toBchName; // TEXT
|
||||||
private int toBlockGlobalNumber; // int32
|
private int toBlockGlobalNumber; // int32
|
||||||
private String toBlockHashe; // TEXT
|
private String toBlockHashe; // TEXT
|
||||||
|
|
||||||
public BlockEntry() {}
|
public BlockEntry() {}
|
||||||
|
|
||||||
public BlockEntry(long loginId,
|
public BlockEntry(String login,
|
||||||
long blockchainId,
|
String bchName,
|
||||||
int blockGlobalNumber,
|
int blockGlobalNumber,
|
||||||
String blockGlobalPreHashe,
|
String blockGlobalPreHashe,
|
||||||
int blockLineIndex,
|
int blockLineIndex,
|
||||||
@ -46,12 +43,12 @@ public class BlockEntry {
|
|||||||
String blockLinePreHashe,
|
String blockLinePreHashe,
|
||||||
int msgType,
|
int msgType,
|
||||||
byte[] blockByte,
|
byte[] blockByte,
|
||||||
long toLoginId,
|
String toLogin,
|
||||||
int toBlockchainId,
|
String toBchName,
|
||||||
int toBlockGlobalNumber,
|
int toBlockGlobalNumber,
|
||||||
String toBlockHashe) {
|
String toBlockHashe) {
|
||||||
this.loginId = loginId;
|
this.login = login;
|
||||||
this.blockchainId = blockchainId;
|
this.bchName = bchName;
|
||||||
this.blockGlobalNumber = blockGlobalNumber;
|
this.blockGlobalNumber = blockGlobalNumber;
|
||||||
this.blockGlobalPreHashe = blockGlobalPreHashe;
|
this.blockGlobalPreHashe = blockGlobalPreHashe;
|
||||||
this.blockLineIndex = blockLineIndex;
|
this.blockLineIndex = blockLineIndex;
|
||||||
@ -59,17 +56,17 @@ public class BlockEntry {
|
|||||||
this.blockLinePreHashe = blockLinePreHashe;
|
this.blockLinePreHashe = blockLinePreHashe;
|
||||||
this.msgType = msgType;
|
this.msgType = msgType;
|
||||||
this.blockByte = blockByte;
|
this.blockByte = blockByte;
|
||||||
this.toLoginId = toLoginId;
|
this.toLogin = toLogin;
|
||||||
this.toBlockchainId = toBlockchainId;
|
this.toBchName = toBchName;
|
||||||
this.toBlockGlobalNumber = toBlockGlobalNumber;
|
this.toBlockGlobalNumber = toBlockGlobalNumber;
|
||||||
this.toBlockHashe = toBlockHashe;
|
this.toBlockHashe = toBlockHashe;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getLoginId() { return loginId; }
|
public String getLogin() { return login; }
|
||||||
public void setLoginId(long loginId) { this.loginId = loginId; }
|
public void setLogin(String login) { this.login = login; }
|
||||||
|
|
||||||
public long getBlockchainId() { return blockchainId; }
|
public String getBchName() { return bchName; }
|
||||||
public void setBlockchainId(long blockchainId) { this.blockchainId = blockchainId; }
|
public void setBchName(String bchName) { this.bchName = bchName; }
|
||||||
|
|
||||||
public int getBlockGlobalNumber() { return blockGlobalNumber; }
|
public int getBlockGlobalNumber() { return blockGlobalNumber; }
|
||||||
public void setBlockGlobalNumber(int blockGlobalNumber) { this.blockGlobalNumber = blockGlobalNumber; }
|
public void setBlockGlobalNumber(int blockGlobalNumber) { this.blockGlobalNumber = blockGlobalNumber; }
|
||||||
@ -92,11 +89,11 @@ public class BlockEntry {
|
|||||||
public byte[] getBlockByte() { return blockByte; }
|
public byte[] getBlockByte() { return blockByte; }
|
||||||
public void setBlockByte(byte[] blockByte) { this.blockByte = blockByte; }
|
public void setBlockByte(byte[] blockByte) { this.blockByte = blockByte; }
|
||||||
|
|
||||||
public long getToLoginId() { return toLoginId; }
|
public String getToLogin() { return toLogin; }
|
||||||
public void setToLoginId(long toLoginId) { this.toLoginId = toLoginId; }
|
public void setToLogin(String toLogin) { this.toLogin = toLogin; }
|
||||||
|
|
||||||
public int getToBlockchainId() { return toBlockchainId; }
|
public String getToBchName() { return toBchName; }
|
||||||
public void setToBlockchainId(int toBlockchainId) { this.toBlockchainId = toBlockchainId; }
|
public void setToBchName(String toBchName) { this.toBchName = toBchName; }
|
||||||
|
|
||||||
public int getToBlockGlobalNumber() { return toBlockGlobalNumber; }
|
public int getToBlockGlobalNumber() { return toBlockGlobalNumber; }
|
||||||
public void setToBlockGlobalNumber(int toBlockGlobalNumber) { this.toBlockGlobalNumber = toBlockGlobalNumber; }
|
public void setToBlockGlobalNumber(int toBlockGlobalNumber) { this.toBlockGlobalNumber = toBlockGlobalNumber; }
|
||||||
|
|||||||
@ -3,86 +3,50 @@ package shine.db.entities;
|
|||||||
/**
|
/**
|
||||||
* Локальная копия пользователя из Solana.
|
* Локальная копия пользователя из Solana.
|
||||||
*
|
*
|
||||||
* Храним:
|
* Теперь:
|
||||||
* - login / loginId;
|
* - login — PRIMARY KEY (TEXT)
|
||||||
* - bchId — id персонального блокчейна;
|
* - bchName — имя/идентификатор персонального блокчейна (TEXT)
|
||||||
* - loginKey — публичный ключ для логина / авторизации;
|
* - loginKey — публичный ключ логина
|
||||||
* - deviceKey — публичный ключ устройства (второй ключ);
|
* - deviceKey — публичный ключ устройства
|
||||||
* - bchLimit — лимит по количеству блоков / размеру цепочки (может быть null).
|
* - bchLimit — лимит (может быть null)
|
||||||
*/
|
*/
|
||||||
public class SolanaUserEntry {
|
public class SolanaUserEntry {
|
||||||
|
|
||||||
private long loginId;
|
private String login; // TEXT PK
|
||||||
private String login;
|
private String bchName; // TEXT NOT NULL
|
||||||
private long bchId;
|
private String loginKey; // TEXT
|
||||||
private String loginKey; // раньше pubkey0
|
private String deviceKey; // TEXT
|
||||||
private String deviceKey; // раньше pubkey1
|
private Integer bchLimit; // INTEGER nullable
|
||||||
private Integer bchLimit; // может быть null
|
|
||||||
|
|
||||||
public SolanaUserEntry() {
|
public SolanaUserEntry() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public SolanaUserEntry(long loginId,
|
public SolanaUserEntry(String login,
|
||||||
String login,
|
String bchName,
|
||||||
long bchId,
|
|
||||||
String loginKey,
|
String loginKey,
|
||||||
String deviceKey,
|
String deviceKey,
|
||||||
Integer bchLimit) {
|
Integer bchLimit) {
|
||||||
this.loginId = loginId;
|
|
||||||
this.login = login;
|
this.login = login;
|
||||||
this.bchId = bchId;
|
this.bchName = bchName;
|
||||||
this.loginKey = loginKey;
|
this.loginKey = loginKey;
|
||||||
this.deviceKey = deviceKey;
|
this.deviceKey = deviceKey;
|
||||||
this.bchLimit = bchLimit;
|
this.bchLimit = bchLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getLoginId() {
|
public String getLogin() { return login; }
|
||||||
return loginId;
|
public void setLogin(String login) { this.login = login; }
|
||||||
}
|
|
||||||
|
|
||||||
public void setLoginId(long loginId) {
|
public String getBchName() { return bchName; }
|
||||||
this.loginId = loginId;
|
public void setBchName(String bchName) { this.bchName = bchName; }
|
||||||
}
|
|
||||||
|
|
||||||
public String getLogin() {
|
|
||||||
return login;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLogin(String login) {
|
|
||||||
this.login = login;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getBchId() {
|
|
||||||
return bchId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBchId(long bchId) {
|
|
||||||
this.bchId = bchId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Публичный ключ логина (основной ключ пользователя). */
|
/** Публичный ключ логина (основной ключ пользователя). */
|
||||||
public String getLoginKey() {
|
public String getLoginKey() { return loginKey; }
|
||||||
return loginKey;
|
public void setLoginKey(String loginKey) { this.loginKey = loginKey; }
|
||||||
}
|
|
||||||
|
|
||||||
public void setLoginKey(String loginKey) {
|
|
||||||
this.loginKey = loginKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Публичный ключ устройства (device key). */
|
/** Публичный ключ устройства (device key). */
|
||||||
public String getDeviceKey() {
|
public String getDeviceKey() { return deviceKey; }
|
||||||
return deviceKey;
|
public void setDeviceKey(String deviceKey) { this.deviceKey = deviceKey; }
|
||||||
}
|
|
||||||
|
|
||||||
public void setDeviceKey(String deviceKey) {
|
public Integer getBchLimit() { return bchLimit; }
|
||||||
this.deviceKey = deviceKey;
|
public void setBchLimit(Integer bchLimit) { this.bchLimit = bchLimit; }
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getBchLimit() {
|
|
||||||
return bchLimit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBchLimit(Integer bchLimit) {
|
|
||||||
this.bchLimit = bchLimit;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -2,7 +2,7 @@ package shine.db.entities;
|
|||||||
|
|
||||||
public class UserParamEntry {
|
public class UserParamEntry {
|
||||||
|
|
||||||
private long loginId;
|
private String login; // TEXT NOT NULL
|
||||||
private String param;
|
private String param;
|
||||||
private long bchChannelId; // новый канал, 8 байт, может быть 0
|
private long bchChannelId; // новый канал, 8 байт, может быть 0
|
||||||
private String value;
|
private String value;
|
||||||
@ -13,14 +13,14 @@ public class UserParamEntry {
|
|||||||
public UserParamEntry() {
|
public UserParamEntry() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserParamEntry(long loginId,
|
public UserParamEntry(String login,
|
||||||
String param,
|
String param,
|
||||||
long bchChannelId,
|
long bchChannelId,
|
||||||
String value,
|
String value,
|
||||||
long timeMs,
|
long timeMs,
|
||||||
short pubkeyNum,
|
short pubkeyNum,
|
||||||
String signature) {
|
String signature) {
|
||||||
this.loginId = loginId;
|
this.login = login;
|
||||||
this.param = param;
|
this.param = param;
|
||||||
this.bchChannelId = bchChannelId;
|
this.bchChannelId = bchChannelId;
|
||||||
this.value = value;
|
this.value = value;
|
||||||
@ -29,59 +29,24 @@ public class UserParamEntry {
|
|||||||
this.signature = signature;
|
this.signature = signature;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getLoginId() {
|
public String getLogin() { return login; }
|
||||||
return loginId;
|
public void setLogin(String login) { this.login = login; }
|
||||||
}
|
|
||||||
|
|
||||||
public void setLoginId(long loginId) {
|
public String getParam() { return param; }
|
||||||
this.loginId = loginId;
|
public void setParam(String param) { this.param = param; }
|
||||||
}
|
|
||||||
|
|
||||||
public String getParam() {
|
public long getBchChannelId() { return bchChannelId; }
|
||||||
return param;
|
public void setBchChannelId(long bchChannelId) { this.bchChannelId = bchChannelId; }
|
||||||
}
|
|
||||||
|
|
||||||
public void setParam(String param) {
|
public String getValue() { return value; }
|
||||||
this.param = param;
|
public void setValue(String value) { this.value = value; }
|
||||||
}
|
|
||||||
|
|
||||||
public long getBchChannelId() {
|
public long getTimeMs() { return timeMs; }
|
||||||
return bchChannelId;
|
public void setTimeMs(long timeMs) { this.timeMs = timeMs; }
|
||||||
}
|
|
||||||
|
|
||||||
public void setBchChannelId(long bchChannelId) {
|
public short getPubkeyNum() { return pubkeyNum; }
|
||||||
this.bchChannelId = bchChannelId;
|
public void setPubkeyNum(short pubkeyNum) { this.pubkeyNum = pubkeyNum; }
|
||||||
}
|
|
||||||
|
|
||||||
public String getValue() {
|
public String getSignature() { return signature; }
|
||||||
return value;
|
public void setSignature(String signature) { this.signature = signature; }
|
||||||
}
|
|
||||||
|
|
||||||
public void setValue(String value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getTimeMs() {
|
|
||||||
return timeMs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTimeMs(long timeMs) {
|
|
||||||
this.timeMs = timeMs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public short getPubkeyNum() {
|
|
||||||
return pubkeyNum;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPubkeyNum(short pubkeyNum) {
|
|
||||||
this.pubkeyNum = pubkeyNum;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSignature() {
|
|
||||||
return signature;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSignature(String signature) {
|
|
||||||
this.signature = signature;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user