Старт

This commit is contained in:
AidarKC
2025-12-04 12:20:47 +03:00
commit ff9301eddb
79 changed files with 4655 additions and 0 deletions
@@ -0,0 +1,119 @@
package shine.db.dao;
import shine.db.SqliteDbController;
import shine.db.entities.SolanaUser;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/** Здесь храним данные об пользователях - локальная копия того что есть в солане */
public final class SolanaUsersDAO {
private static volatile SolanaUsersDAO instance;
private final SqliteDbController db = SqliteDbController.getInstance();
private SolanaUsersDAO() {}
public static SolanaUsersDAO getInstance() {
if (instance == null) {
synchronized (SolanaUsersDAO.class) {
if (instance == null) {
instance = new SolanaUsersDAO();
}
}
}
return instance;
}
public void insert(SolanaUser user) throws SQLException {
String sql = """
INSERT INTO solana_users (login, loginId, bchId, pubkey0, pubkey1, bchLimit)
VALUES (?, ?, ?, ?, ?, ?)
""";
try (PreparedStatement ps = db.getConnection().prepareStatement(sql)) {
ps.setString(1, user.getLogin());
ps.setLong(2, user.getLoginId());
ps.setLong(3, user.getBchId());
ps.setString(4, user.getPubkey0());
ps.setString(5, user.getPubkey1());
if (user.getBchLimit() != null) {
ps.setInt(6, user.getBchLimit());
} else {
ps.setNull(6, Types.INTEGER);
}
ps.executeUpdate();
}
}
public SolanaUser getByLoginId(long loginId) throws SQLException {
String sql = """
SELECT login, loginId, bchId, pubkey0, pubkey1, bchLimit
FROM solana_users
WHERE loginId = ?
""";
try (PreparedStatement ps = db.getConnection().prepareStatement(sql)) {
ps.setLong(1, loginId);
try (ResultSet rs = ps.executeQuery()) {
if (!rs.next()) return null;
return mapRow(rs);
}
}
}
public SolanaUser getByLogin(String login) throws SQLException {
String sql = """
SELECT login, loginId, bchId, pubkey0, pubkey1, bchLimit
FROM solana_users
WHERE LOWER(login) = LOWER(?)
""";
try (PreparedStatement ps = db.getConnection().prepareStatement(sql)) {
ps.setString(1, login);
try (ResultSet rs = ps.executeQuery()) {
if (!rs.next()) return null;
return mapRow(rs);
}
}
}
public List<SolanaUser> searchByLoginPrefix(String prefix) throws SQLException {
String sql = """
SELECT login, loginId, bchId, pubkey0, pubkey1, bchLimit
FROM solana_users
WHERE LOWER(login) LIKE ?
ORDER BY login
LIMIT 5
""";
List<SolanaUser> result = new ArrayList<>();
try (PreparedStatement ps = db.getConnection().prepareStatement(sql)) {
ps.setString(1, prefix.toLowerCase() + "%");
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) result.add(mapRow(rs));
}
}
return result;
}
private SolanaUser mapRow(ResultSet rs) throws SQLException {
return new SolanaUser(
rs.getLong("loginId"),
rs.getString("login"),
rs.getLong("bchId"),
rs.getString("pubkey0"),
rs.getString("pubkey1"),
rs.getObject("bchLimit") != null ? rs.getInt("bchLimit") : null
);
}
}