Get maker reagent from PG db, rework processor (no statics)

This commit is contained in:
P0nk
2023-03-02 08:18:03 +01:00
parent 5cecb7adb6
commit c0c0a2d2d9
11 changed files with 155 additions and 80 deletions

View File

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

View 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);
}
}
}

View 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;
}
}

View 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);
}
}

View 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);
}
}