Get maker reagent from PG db, rework processor (no statics)
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package database;
|
||||
|
||||
import database.maker.MakerReagentRowMapper;
|
||||
import database.note.NoteRowMapper;
|
||||
import org.jdbi.v3.core.Handle;
|
||||
import org.jdbi.v3.core.Jdbi;
|
||||
@@ -14,8 +15,14 @@ public class PgDatabaseConnection {
|
||||
|
||||
public PgDatabaseConnection(DataSource dataSource) {
|
||||
this.dataSource = dataSource;
|
||||
this.jdbi = Jdbi.create(dataSource)
|
||||
.registerRowMapper(new NoteRowMapper()); // TODO: configure jdbi elsewhere
|
||||
this.jdbi = Jdbi.create(dataSource);
|
||||
registerRowMappers();
|
||||
// TODO: configure jdbi elsewhere
|
||||
}
|
||||
|
||||
private void registerRowMappers() {
|
||||
jdbi.registerRowMapper(new NoteRowMapper())
|
||||
.registerRowMapper(new MakerReagentRowMapper());
|
||||
}
|
||||
|
||||
public Connection getConnection() throws SQLException {
|
||||
|
||||
30
src/main/java/database/maker/MakerDao.java
Normal file
30
src/main/java/database/maker/MakerDao.java
Normal file
@@ -0,0 +1,30 @@
|
||||
package database.maker;
|
||||
|
||||
import database.DaoException;
|
||||
import database.PgDatabaseConnection;
|
||||
import org.jdbi.v3.core.Handle;
|
||||
import org.jdbi.v3.core.JdbiException;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public class MakerDao {
|
||||
private final PgDatabaseConnection connection;
|
||||
|
||||
public MakerDao(PgDatabaseConnection connection) {
|
||||
this.connection = connection;
|
||||
}
|
||||
|
||||
public Optional<MakerReagent> getReagent(int itemId) {
|
||||
try (Handle handle = connection.getHandle()) {
|
||||
return handle.createQuery("""
|
||||
SELECT *
|
||||
FROM maker_reagent
|
||||
WHERE item_id = ?;""")
|
||||
.bind(0, itemId)
|
||||
.mapTo(MakerReagent.class)
|
||||
.findOne();
|
||||
} catch (JdbiException e) {
|
||||
throw new DaoException("Failed to get maker reagent with item id: %d".formatted(itemId), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
28
src/main/java/database/maker/MakerInfoProvider.java
Normal file
28
src/main/java/database/maker/MakerInfoProvider.java
Normal file
@@ -0,0 +1,28 @@
|
||||
package database.maker;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class MakerInfoProvider {
|
||||
private final MakerDao makerDao;
|
||||
private final Map<Integer, MakerReagent> reagents = new ConcurrentHashMap<>();
|
||||
|
||||
public MakerInfoProvider(MakerDao makerDao) {
|
||||
this.makerDao = makerDao;
|
||||
}
|
||||
|
||||
public Optional<MakerReagent> getMakerReagent(int itemId) {
|
||||
final MakerReagent cachedReagent = reagents.get(itemId);
|
||||
if (cachedReagent != null) {
|
||||
return Optional.of(cachedReagent);
|
||||
}
|
||||
|
||||
final Optional<MakerReagent> reagentFromDb = makerDao.getReagent(itemId);
|
||||
if (reagentFromDb.isEmpty()) {
|
||||
return Optional.empty();
|
||||
}
|
||||
reagents.put(itemId, reagentFromDb.get());
|
||||
return reagentFromDb;
|
||||
}
|
||||
}
|
||||
9
src/main/java/database/maker/MakerReagent.java
Normal file
9
src/main/java/database/maker/MakerReagent.java
Normal file
@@ -0,0 +1,9 @@
|
||||
package database.maker;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public record MakerReagent(int itemId, String stat, int value) {
|
||||
public MakerReagent {
|
||||
Objects.requireNonNull(stat);
|
||||
}
|
||||
}
|
||||
18
src/main/java/database/maker/MakerReagentRowMapper.java
Normal file
18
src/main/java/database/maker/MakerReagentRowMapper.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package database.maker;
|
||||
|
||||
import org.jdbi.v3.core.mapper.RowMapper;
|
||||
import org.jdbi.v3.core.statement.StatementContext;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
||||
public class MakerReagentRowMapper implements RowMapper<MakerReagent> {
|
||||
|
||||
@Override
|
||||
public MakerReagent map(ResultSet rs, StatementContext ctx) throws SQLException {
|
||||
int itemId = rs.getInt("item_id");
|
||||
String stat = rs.getString("stat");
|
||||
int value = rs.getInt("value");
|
||||
return new MakerReagent(itemId, stat, value);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user