From 62ea49d1fcaf674de2f7ef733c1a465a35fcfd5432814e2e45615a24bd335bea Mon Sep 17 00:00:00 2001 From: AidarKC Date: Tue, 30 Dec 2025 13:03:03 +0300 Subject: [PATCH] =?UTF-8?q?30=2012=2025=20=D0=A3=D1=80=D0=B0=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82=20=D0=B2=D1=81=D1=91?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B4=20=D0=BD=D0=BE=D0=B2=D1=83=D1=8E=20=D1=82?= =?UTF-8?q?=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D1=83.=20=D0=98=20=D0=B2=D1=81?= =?UTF-8?q?=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=85=D0=BE=D0=B4=D1=8F=D1=82!!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/shine/db/DatabaseInitializer.java | 2 +- .../main/java/shine/db/dao/SolanaUsersDAO.java | 17 ++++++++++++----- .../main/java/shine/db/dao/UserCreateDAO.java | 2 +- .../java/shine/db/entities/SolanaUserEntry.java | 10 ++++++++++ .../tempToTest/Net_AddUser_Handler.java | 1 + 5 files changed, 25 insertions(+), 7 deletions(-) diff --git a/shine-server-db/src/main/java/shine/db/DatabaseInitializer.java b/shine-server-db/src/main/java/shine/db/DatabaseInitializer.java index 1e569c9..981579b 100644 --- a/shine-server-db/src/main/java/shine/db/DatabaseInitializer.java +++ b/shine-server-db/src/main/java/shine/db/DatabaseInitializer.java @@ -82,7 +82,7 @@ public class DatabaseInitializer { CREATE TABLE IF NOT EXISTS solana_users ( login TEXT NOT NULL PRIMARY KEY, deviceKey TEXT NOT NULL, - solanaKey TEXT NULLABLE + solanaKey TEXT ); """); diff --git a/shine-server-db/src/main/java/shine/db/dao/SolanaUsersDAO.java b/shine-server-db/src/main/java/shine/db/dao/SolanaUsersDAO.java index 10f2869..7cfd9a6 100644 --- a/shine-server-db/src/main/java/shine/db/dao/SolanaUsersDAO.java +++ b/shine-server-db/src/main/java/shine/db/dao/SolanaUsersDAO.java @@ -42,13 +42,14 @@ public final class SolanaUsersDAO { /** Вставка с внешним соединением. Соединение НЕ закрывает. */ public void insert(Connection c, SolanaUserEntry user) throws SQLException { String sql = """ - INSERT INTO solana_users (login, deviceKey) - VALUES (?, ?) + INSERT INTO solana_users (login, deviceKey, solanaKey) + VALUES (?, ?, ?) """; try (PreparedStatement ps = c.prepareStatement(sql)) { ps.setString(1, user.getLogin()); ps.setString(2, user.getDeviceKey()); + ps.setString(3, user.getSolanaKey()); ps.executeUpdate(); } } @@ -91,7 +92,7 @@ public final class SolanaUsersDAO { /** Получить по login (case-insensitive) с внешним соединением. Соединение НЕ закрывает. */ public SolanaUserEntry getByLogin(Connection c, String login) throws SQLException { String sql = """ - SELECT login, deviceKey + SELECT login, deviceKey, solanaKey FROM solana_users WHERE LOWER(login) = LOWER(?) """; @@ -115,7 +116,7 @@ public final class SolanaUsersDAO { /** Поиск по префиксу с внешним соединением. Соединение НЕ закрывает. */ public List searchByLoginPrefix(Connection c, String prefix) throws SQLException { String sql = """ - SELECT login, deviceKey + SELECT login, deviceKey, solanaKey FROM solana_users WHERE LOWER(login) LIKE ? ORDER BY login @@ -144,9 +145,15 @@ public final class SolanaUsersDAO { // -------------------- MAPPER -------------------- private SolanaUserEntry mapRow(ResultSet rs) throws SQLException { - return new SolanaUserEntry( + SolanaUserEntry e = new SolanaUserEntry( rs.getString("login"), rs.getString("deviceKey") ); + + String solanaKey = rs.getString("solanaKey"); + if (rs.wasNull()) solanaKey = null; + e.setSolanaKey(solanaKey); + + return e; } } \ No newline at end of file diff --git a/shine-server-db/src/main/java/shine/db/dao/UserCreateDAO.java b/shine-server-db/src/main/java/shine/db/dao/UserCreateDAO.java index d126bea..41083e8 100644 --- a/shine-server-db/src/main/java/shine/db/dao/UserCreateDAO.java +++ b/shine-server-db/src/main/java/shine/db/dao/UserCreateDAO.java @@ -56,7 +56,7 @@ public final class UserCreateDAO { try { // 1) user - SolanaUserEntry u = new SolanaUserEntry(login, deviceKey); + SolanaUserEntry u = new SolanaUserEntry(login, deviceKey, deviceKey); usersDao.insert(c, u); // если login занят -> constraint // 2) blockchain_state diff --git a/shine-server-db/src/main/java/shine/db/entities/SolanaUserEntry.java b/shine-server-db/src/main/java/shine/db/entities/SolanaUserEntry.java index 320a306..92b0285 100644 --- a/shine-server-db/src/main/java/shine/db/entities/SolanaUserEntry.java +++ b/shine-server-db/src/main/java/shine/db/entities/SolanaUserEntry.java @@ -16,6 +16,7 @@ public class SolanaUserEntry { private String login; // TEXT PK private String deviceKey; // TEXT NOT NULL (Base64(32 bytes)) + private String solanaKey; // TEXT public SolanaUserEntry() {} @@ -24,6 +25,12 @@ public class SolanaUserEntry { this.deviceKey = deviceKey; } + public SolanaUserEntry(String login, String deviceKey, String solanaKey) { + this.login = login; + this.deviceKey = deviceKey; + this.solanaKey = solanaKey; + } + public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } @@ -31,6 +38,9 @@ public class SolanaUserEntry { public String getDeviceKey() { return deviceKey; } public void setDeviceKey(String deviceKey) { this.deviceKey = deviceKey; } + public String getSolanaKey() { return solanaKey; } + public void setSolanaKey(String solanaKey) { this.solanaKey = solanaKey; } + /** * Device key в байтах (32 байта) или null, если ключ битый/пустой. * diff --git a/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/tempToTest/Net_AddUser_Handler.java b/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/tempToTest/Net_AddUser_Handler.java index 49efaf2..8894b97 100644 --- a/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/tempToTest/Net_AddUser_Handler.java +++ b/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/tempToTest/Net_AddUser_Handler.java @@ -90,6 +90,7 @@ public class Net_AddUser_Handler implements JsonMessageHandler { // 3. Создаём пользователя SolanaUserEntry user = new SolanaUserEntry( req.getLogin(), + req.getDeviceKey(), req.getDeviceKey() );