From a0b4ce3b407451b70e6ea4aed315ae42e153e20a Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Fri, 20 Jun 2025 18:32:03 +0200 Subject: [PATCH] refactor: common implementation for all data catalogues --- .../datacatalogues/AbstractDataCatalogue.java | 46 +++++++++++++++++++ .../datacatalogues/DataCatalogue.java | 20 ++++++++ .../datacatalogues/KpaCatalogue.java | 35 ++++---------- 3 files changed, 75 insertions(+), 26 deletions(-) create mode 100644 src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/AbstractDataCatalogue.java create mode 100644 src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/DataCatalogue.java diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/AbstractDataCatalogue.java b/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/AbstractDataCatalogue.java new file mode 100644 index 0000000..4ee2c7f --- /dev/null +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/AbstractDataCatalogue.java @@ -0,0 +1,46 @@ +package dev.pcvolkmer.onco.datamapper.datacatalogues; + +import dev.pcvolkmer.onco.datamapper.exceptions.DataAccessException; +import org.springframework.jdbc.core.JdbcTemplate; + +import java.sql.ResultSet; + +/** + * Common implementations for all data catalogues + * + * @author Paul-Christian Volkmer + * @since 0.1 + */ +public abstract class AbstractDataCatalogue implements DataCatalogue { + + protected final JdbcTemplate jdbcTemplate; + + protected AbstractDataCatalogue(JdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + } + + protected abstract String getTableName(); + + /** + * Get procedure result set by procedure id + * + * @param id The procedure id + * @return The procedure id + */ + @Override + public ResultSet getById(int id) { + var result = this.jdbcTemplate.query( + String.format("SELECT * FROM %s JOIN prozedur ON (prozedur.id = dk_dnpm_kpa.id) WHERE id = ?", getTableName()), + (resultSet, i) -> resultSet, + id); + + if (result.isEmpty()) { + throw new DataAccessException("No record found for id: " + id); + } else if (result.size() > 1) { + throw new DataAccessException("Multiple records found for id: " + id); + } + + return result.get(0); + } + +} diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/DataCatalogue.java b/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/DataCatalogue.java new file mode 100644 index 0000000..331bcf2 --- /dev/null +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/DataCatalogue.java @@ -0,0 +1,20 @@ +package dev.pcvolkmer.onco.datamapper.datacatalogues; + +import java.sql.ResultSet; + +/** + * Common interface for all data catalogues + * + * @author Paul-Christian Volkmer + * @since 0.1 + */ +public interface DataCatalogue { + + /** + * Get a result set by database id + * @param id The database id (primary key) + * @return The result set + */ + ResultSet getById(int id); + +} diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/KpaCatalogue.java b/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/KpaCatalogue.java index 1c257ff..6e87de2 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/KpaCatalogue.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/KpaCatalogue.java @@ -3,48 +3,30 @@ package dev.pcvolkmer.onco.datamapper.datacatalogues; import dev.pcvolkmer.onco.datamapper.exceptions.DataAccessException; import org.springframework.jdbc.core.JdbcTemplate; -import java.sql.ResultSet; - /** * Load raw result sets from database table 'dk_dnpm_kpa' * * @author Paul-Christian Volkmer * @since 0.1 */ -public class KpaCatalogue { - - private final JdbcTemplate jdbcTemplate; +public class KpaCatalogue extends AbstractDataCatalogue { private KpaCatalogue(JdbcTemplate jdbcTemplate) { - this.jdbcTemplate = jdbcTemplate; + super(jdbcTemplate); + } + + @Override + protected String getTableName() { + return "dk_dnpm_kpa"; } public static KpaCatalogue create(JdbcTemplate jdbcTemplate) { return new KpaCatalogue(jdbcTemplate); } - /** - * Get procedure result set by procedure id - * @param id The procedure id - * @return The procedure id - */ - public ResultSet getById(int id) { - var result = this.jdbcTemplate.query( - "SELECT * FROM dk_dnpm_kpa JOIN prozedur ON (prozedur.id = dk_dnpm_kpa.id) WHERE id = ?", - (resultSet, i) -> resultSet, - id); - - if (result.isEmpty()) { - throw new DataAccessException("No record found for id: " + id); - } else if (result.size() > 1) { - throw new DataAccessException("Multiple records found for id: " + id); - } - - return result.get(0); - } - /** * Get procedure database id by case id + * * @param caseId The case id * @return The procedure id */ @@ -65,6 +47,7 @@ public class KpaCatalogue { /** * Get patient database id by case id + * * @param caseId The case id * @return The patients database id */