SHA256
72 lines
2.3 KiB
Java
72 lines
2.3 KiB
Java
package shine.db.dao;
|
|
|
|
import shine.db.DbController;
|
|
import shine.db.KeyEncodingUtil;
|
|
import shine.db.entities.SolanaUserPdaCurrentEntry;
|
|
|
|
import java.sql.Connection;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.ResultSet;
|
|
import java.sql.SQLException;
|
|
|
|
/**
|
|
* Доступ к актуальной PostgreSQL-таблице пользователей, поддерживаемой sync-модулем.
|
|
*/
|
|
public final class SolanaUserPdaCurrentDAO {
|
|
|
|
private static volatile SolanaUserPdaCurrentDAO instance;
|
|
|
|
private final DbController db = DbController.getInstance();
|
|
|
|
private SolanaUserPdaCurrentDAO() {}
|
|
|
|
public static SolanaUserPdaCurrentDAO getInstance() {
|
|
if (instance == null) {
|
|
synchronized (SolanaUserPdaCurrentDAO.class) {
|
|
if (instance == null) {
|
|
instance = new SolanaUserPdaCurrentDAO();
|
|
}
|
|
}
|
|
}
|
|
return instance;
|
|
}
|
|
|
|
public SolanaUserPdaCurrentEntry getByBlockchainName(String blockchainName) throws SQLException {
|
|
try (Connection c = db.getConnection()) {
|
|
return getByBlockchainName(c, blockchainName);
|
|
}
|
|
}
|
|
|
|
public SolanaUserPdaCurrentEntry getByBlockchainName(Connection c, String blockchainName) throws SQLException {
|
|
String sql = """
|
|
SELECT
|
|
login,
|
|
blockchain_name,
|
|
blockchain_key,
|
|
paid_limit_bytes
|
|
FROM solana_user_pda_current
|
|
WHERE blockchain_name = ?
|
|
LIMIT 1
|
|
""";
|
|
|
|
try (PreparedStatement ps = c.prepareStatement(sql)) {
|
|
ps.setString(1, blockchainName);
|
|
try (ResultSet rs = ps.executeQuery()) {
|
|
if (!rs.next()) {
|
|
return null;
|
|
}
|
|
return mapRow(rs);
|
|
}
|
|
}
|
|
}
|
|
|
|
private SolanaUserPdaCurrentEntry mapRow(ResultSet rs) throws SQLException {
|
|
SolanaUserPdaCurrentEntry entry = new SolanaUserPdaCurrentEntry();
|
|
entry.setLogin(rs.getString("login"));
|
|
entry.setBlockchainName(rs.getString("blockchain_name"));
|
|
entry.setBlockchainKey(KeyEncodingUtil.normalizeKeyToBase64_32(rs.getString("blockchain_key")));
|
|
entry.setPaidLimitBytes(rs.getLong("paid_limit_bytes"));
|
|
return entry;
|
|
}
|
|
}
|