From b3ec325e95de4316b539f4293c9a09f79555f8c0 Mon Sep 17 00:00:00 2001 From: P0nk Date: Tue, 25 Jul 2023 18:46:03 +0200 Subject: [PATCH] Add monster card table and initial dao --- .../database/monsterbook/MonsterCardDao.java | 30 +++++++++++++++++++ .../monsterbook/MonsterCardRowMapper.java | 17 +++++++++++ .../postgresql/V0.7__monster_card.sql | 11 +++++++ 3 files changed, 58 insertions(+) create mode 100644 src/main/java/database/monsterbook/MonsterCardDao.java create mode 100644 src/main/java/database/monsterbook/MonsterCardRowMapper.java create mode 100644 src/main/resources/db/migration/postgresql/V0.7__monster_card.sql diff --git a/src/main/java/database/monsterbook/MonsterCardDao.java b/src/main/java/database/monsterbook/MonsterCardDao.java new file mode 100644 index 0000000000..7c51e929c1 --- /dev/null +++ b/src/main/java/database/monsterbook/MonsterCardDao.java @@ -0,0 +1,30 @@ +package database.monsterbook; + +import database.DaoException; +import database.PgDatabaseConnection; +import org.jdbi.v3.core.Handle; +import org.jdbi.v3.core.JdbiException; + +import java.util.List; + +public class MonsterCardDao { + private final PgDatabaseConnection connection; + + public MonsterCardDao(PgDatabaseConnection connection) { + this.connection = connection; + } + + public List load(int chrId) { + try (Handle handle = connection.getHandle()) { + return handle.createQuery(""" + SELECT * + FROM monster_card + WHERE chr_id = ?;""") + .bind(0, chrId) + .mapTo(MonsterCard.class) + .list(); + } catch (JdbiException e) { + throw new DaoException("Failed to find monster cards for chr id %d".formatted(chrId), e); + } + } +} diff --git a/src/main/java/database/monsterbook/MonsterCardRowMapper.java b/src/main/java/database/monsterbook/MonsterCardRowMapper.java new file mode 100644 index 0000000000..9b51010bc6 --- /dev/null +++ b/src/main/java/database/monsterbook/MonsterCardRowMapper.java @@ -0,0 +1,17 @@ +package database.monsterbook; + +import org.jdbi.v3.core.mapper.RowMapper; +import org.jdbi.v3.core.statement.StatementContext; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class MonsterCardRowMapper implements RowMapper { + + @Override + public MonsterCard map(ResultSet rs, StatementContext ctx) throws SQLException { + int cardId = rs.getInt("card_id"); + byte level = rs.getByte("level"); + return new MonsterCard(cardId, level); + } +} diff --git a/src/main/resources/db/migration/postgresql/V0.7__monster_card.sql b/src/main/resources/db/migration/postgresql/V0.7__monster_card.sql new file mode 100644 index 0000000000..ed9b23f479 --- /dev/null +++ b/src/main/resources/db/migration/postgresql/V0.7__monster_card.sql @@ -0,0 +1,11 @@ +CREATE TABLE monster_card +( + chr_id integer NOT NULL, + card_id integer NOT NULL, + level smallint NOT NULL, + PRIMARY KEY(chr_id, card_id) + /* TODO once chr is moved to postgres: + CONSTRAINT fk_monster_card_chr FOREIGN KEY (chr_id) REFERENCES character(id); + */ +); +GRANT SELECT, INSERT, UPDATE ON TABLE monster_card TO ${server-username};