From b43b85a5b5ad1ecff8c84baf21dd808443e05ed8 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Thu, 27 Jul 2023 09:21:36 +0200 Subject: [PATCH] Issue #37: Methoden um nur aktive Studien zu erhalten --- .../analyzer/EinzelempfehlungAnalyzer.java | 13 +++++++-- src/main/java/DNPM/dto/Studie.java | 9 +++++- .../DNPM/services/DefaultStudienService.java | 21 +++++++++++--- .../java/DNPM/services/StudienService.java | 15 ++++++++++ .../EinzelempfehlungAnalyzerTest.java | 28 +++++++++++++++---- src/test/java/DNPM/services/StudieTest.java | 9 ++++-- 6 files changed, 79 insertions(+), 16 deletions(-) diff --git a/src/main/java/DNPM/analyzer/EinzelempfehlungAnalyzer.java b/src/main/java/DNPM/analyzer/EinzelempfehlungAnalyzer.java index ef64160..1ace2f8 100644 --- a/src/main/java/DNPM/analyzer/EinzelempfehlungAnalyzer.java +++ b/src/main/java/DNPM/analyzer/EinzelempfehlungAnalyzer.java @@ -128,7 +128,7 @@ public class EinzelempfehlungAnalyzer implements IProcedureAnalyzer { * executePluginMethod( * 'TherapieplanAnalyzer', * 'getStudien', - * { q: 'NCT-12' }, + * { q: 'NCT-12', inactive: true }, * (response) => console.log(response), * false * ); @@ -139,11 +139,18 @@ public class EinzelempfehlungAnalyzer implements IProcedureAnalyzer { */ public List getStudien(Map input) { var query = AnalyzerUtils.getRequiredValue(input, "q", String.class); + var inactive = AnalyzerUtils.getRequiredValue(input, "inactive", Boolean.class).orElse(false); if (query.isEmpty() || query.get().isBlank()) { - return studienService.findAll(); + if (inactive) { + return studienService.findAll(); + } + return studienService.findActive(); } - return studienService.findByQuery(query.get()); + if (inactive) { + return studienService.findByQuery(query.get()); + } + return studienService.findActiveByQuery(query.get()); } } diff --git a/src/main/java/DNPM/dto/Studie.java b/src/main/java/DNPM/dto/Studie.java index 877cdd0..4ee4fde 100644 --- a/src/main/java/DNPM/dto/Studie.java +++ b/src/main/java/DNPM/dto/Studie.java @@ -32,13 +32,16 @@ public class Studie { private final String description; private final int version; - public Studie(final String kategorieName, final int version, final String code, final String studiennummer, final String shortDesc, final String description) { + private final boolean active; + + public Studie(final String kategorieName, final int version, final String code, final String studiennummer, final String shortDesc, final String description, final boolean active) { this.kategorieName = kategorieName; this.version = version; this.code = code; this.studiennummer = studiennummer; this.shortDesc = shortDesc; this.description = description; + this.active = active; } public String getKategorieName() { @@ -65,6 +68,10 @@ public class Studie { return description; } + public boolean isActive() { + return active; + } + public Type getType() { if (this.hasNctNumber()) { return Type.NCT; diff --git a/src/main/java/DNPM/services/DefaultStudienService.java b/src/main/java/DNPM/services/DefaultStudienService.java index 82be5e7..e172cc8 100644 --- a/src/main/java/DNPM/services/DefaultStudienService.java +++ b/src/main/java/DNPM/services/DefaultStudienService.java @@ -5,6 +5,7 @@ import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; import java.util.List; +import java.util.stream.Collectors; /** * Standardimplementierung zum Ermitteln von Studien @@ -21,7 +22,7 @@ public class DefaultStudienService implements StudienService { @Override public List findAll() { - var sql = "SELECT pcc.name, pcv.version_number, TRIM(studie.studien_nummer) AS studien_nummer, studie.startdatum, studie.endedatum, pcve.code, pcve.shortdesc, pcve.description FROM studie " + var sql = "SELECT pcc.name, pcv.version_number, TRIM(studie.studien_nummer) AS studien_nummer, studie.startdatum, studie.endedatum, pcve.code, pcve.shortdesc, pcve.description, studie.aktiv FROM studie " + "LEFT JOIN category_entry ce ON ce.version_entry_id = studie.property_version_entry " + "LEFT JOIN property_catalogue_category pcc ON pcc.id = ce.category_id " + "JOIN property_catalogue_version_entry pcve ON pcve.id = studie.property_version_entry " @@ -36,13 +37,14 @@ public class DefaultStudienService implements StudienService { resultSet.getString("code"), resultSet.getString("studien_nummer"), resultSet.getString("shortdesc"), - resultSet.getString("description") + resultSet.getString("description"), + resultSet.getBoolean("aktiv") )); } @Override public List findByQuery(String query) { - var sql = "SELECT pcc.name, pcv.version_number, TRIM(studie.studien_nummer) AS studien_nummer, studie.startdatum, studie.endedatum, pcve.code, pcve.shortdesc, pcve.description FROM studie " + var sql = "SELECT pcc.name, pcv.version_number, TRIM(studie.studien_nummer) AS studien_nummer, studie.startdatum, studie.endedatum, pcve.code, pcve.shortdesc, pcve.description, studie.aktiv FROM studie " + "LEFT JOIN category_entry ce ON ce.version_entry_id = studie.property_version_entry " + "LEFT JOIN property_catalogue_category pcc ON pcc.id = ce.category_id " + "JOIN property_catalogue_version_entry pcve ON pcve.id = studie.property_version_entry " @@ -59,7 +61,18 @@ public class DefaultStudienService implements StudienService { resultSet.getString("code"), resultSet.getString("studien_nummer"), resultSet.getString("shortdesc"), - resultSet.getString("description") + resultSet.getString("description"), + resultSet.getBoolean("aktiv") )); } + + @Override + public List findActive() { + return findAll().stream().filter(Studie::isActive).collect(Collectors.toList()); + } + + @Override + public List findActiveByQuery(String query) { + return findByQuery(query).stream().filter(Studie::isActive).collect(Collectors.toList()); + } } diff --git a/src/main/java/DNPM/services/StudienService.java b/src/main/java/DNPM/services/StudienService.java index dc0187e..c82947d 100644 --- a/src/main/java/DNPM/services/StudienService.java +++ b/src/main/java/DNPM/services/StudienService.java @@ -21,4 +21,19 @@ public interface StudienService { */ List findByQuery(String query); + /** + * Übergibt eine Liste mit aktiven Studien + * + * @return Liste mit aktiven Studien + */ + List findActive(); + + /** + * Übergibt eine Liste mit aktiven Studien, deren (Kurz-)Beschreibung oder Studiennummer den übergebenen Wert enthalten + * + * @param query Wert der enthalten sein muss + * @return Gefilterte Liste mit aktiven Studien + */ + List findActiveByQuery(String query); + } diff --git a/src/test/java/DNPM/analyzer/EinzelempfehlungAnalyzerTest.java b/src/test/java/DNPM/analyzer/EinzelempfehlungAnalyzerTest.java index 8812442..2967733 100644 --- a/src/test/java/DNPM/analyzer/EinzelempfehlungAnalyzerTest.java +++ b/src/test/java/DNPM/analyzer/EinzelempfehlungAnalyzerTest.java @@ -62,24 +62,42 @@ class EinzelempfehlungAnalyzerTest { var input = Map.of("q", (Object) " "); this.analyzer.getStudien(input); - verify(studienService, times(1)).findAll(); + verify(studienService, times(1)).findActive(); } @Test - void shouldRequestAllStudienForEmptyInputMap() { + void shouldRequestActiveStudienForEmptyInputMap() { var input = new HashMap(); this.analyzer.getStudien(input); - verify(studienService, times(1)).findAll(); + verify(studienService, times(1)).findActive(); } @Test - void shouldRequestFilteredStudien() { + void shouldRequestFilteredActiveStudien() { var input = Map.of("q", (Object) "NCT-123"); this.analyzer.getStudien(input); var captor = ArgumentCaptor.forClass(String.class); - verify(studienService, times(1)).findByQuery(captor.capture()); + verify(studienService, times(1)).findActiveByQuery(captor.capture()); + assertThat(captor.getValue()).isEqualTo("NCT-123"); + } + + @Test + void shouldRequestActiveStudien() { + var input = Map.of("q", (Object) ""); + this.analyzer.getStudien(input); + + verify(studienService, times(1)).findActive(); + } + + @Test + void shouldRequestAllFilteredtudien() { + var input = Map.of("q", (Object) "NCT-123"); + this.analyzer.getStudien(input); + + var captor = ArgumentCaptor.forClass(String.class); + verify(studienService, times(1)).findActiveByQuery(captor.capture()); assertThat(captor.getValue()).isEqualTo("NCT-123"); } diff --git a/src/test/java/DNPM/services/StudieTest.java b/src/test/java/DNPM/services/StudieTest.java index e9bdf25..a6b8ccf 100644 --- a/src/test/java/DNPM/services/StudieTest.java +++ b/src/test/java/DNPM/services/StudieTest.java @@ -15,7 +15,8 @@ class StudieTest { null, "Nct-12345678", "Teststudie 1", - "Teststudie 1" + "Teststudie 1", + true ); assertThat(studie.getType()).isEqualTo(Studie.Type.NCT); @@ -29,7 +30,8 @@ class StudieTest { null, "2023-012345-12", "Teststudie 1", - "Teststudie 1" + "Teststudie 1", + true ); assertThat(studie.getType()).isEqualTo(Studie.Type.EUDRA_CT); @@ -43,7 +45,8 @@ class StudieTest { "teststudie1", null, "Teststudie 1", - "Teststudie 1" + "Teststudie 1", + true ); assertThat(studie.getType()).isEqualTo(Studie.Type.UNKNOWN);