feat: add PostgresSensitiveKeysRepository
This commit is contained in:
@@ -0,0 +1,58 @@
|
|||||||
|
package com.cameleer3.server.app.storage;
|
||||||
|
|
||||||
|
import com.cameleer3.server.core.admin.SensitiveKeysConfig;
|
||||||
|
import com.cameleer3.server.core.admin.SensitiveKeysRepository;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public class PostgresSensitiveKeysRepository implements SensitiveKeysRepository {
|
||||||
|
|
||||||
|
private final JdbcTemplate jdbc;
|
||||||
|
private final ObjectMapper objectMapper;
|
||||||
|
|
||||||
|
public PostgresSensitiveKeysRepository(JdbcTemplate jdbc, ObjectMapper objectMapper) {
|
||||||
|
this.jdbc = jdbc;
|
||||||
|
this.objectMapper = objectMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<SensitiveKeysConfig> find() {
|
||||||
|
List<SensitiveKeysConfig> results = jdbc.query(
|
||||||
|
"SELECT config_val FROM server_config WHERE config_key = 'sensitive_keys'",
|
||||||
|
(rs, rowNum) -> {
|
||||||
|
String json = rs.getString("config_val");
|
||||||
|
try {
|
||||||
|
return objectMapper.readValue(json, SensitiveKeysConfig.class);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException("Failed to deserialize sensitive keys config", e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return results.isEmpty() ? Optional.empty() : Optional.of(results.get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save(SensitiveKeysConfig config, String updatedBy) {
|
||||||
|
String json;
|
||||||
|
try {
|
||||||
|
json = objectMapper.writeValueAsString(config);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException("Failed to serialize sensitive keys config", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
jdbc.update("""
|
||||||
|
INSERT INTO server_config (config_key, config_val, updated_by, updated_at)
|
||||||
|
VALUES ('sensitive_keys', ?::jsonb, ?, now())
|
||||||
|
ON CONFLICT (config_key) DO UPDATE SET
|
||||||
|
config_val = EXCLUDED.config_val,
|
||||||
|
updated_by = EXCLUDED.updated_by,
|
||||||
|
updated_at = now()
|
||||||
|
""",
|
||||||
|
json, updatedBy);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user