Ура работает всё под новую таблицу. И все тесты проходят!!
This commit is contained in:
AidarKC 2025-12-30 13:03:03 +03:00
parent f653689112
commit 62ea49d1fc
5 changed files with 25 additions and 7 deletions

View File

@ -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
);
""");

View File

@ -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<SolanaUserEntry> 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;
}
}

View File

@ -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

View File

@ -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, если ключ битый/пустой.
*

View File

@ -90,6 +90,7 @@ public class Net_AddUser_Handler implements JsonMessageHandler {
// 3. Создаём пользователя
SolanaUserEntry user = new SolanaUserEntry(
req.getLogin(),
req.getDeviceKey(),
req.getDeviceKey()
);