1
0
mirror of https://github.com/pcvolkmer/onkostar-plugin-dnpm.git synced 2025-07-02 01:02:55 +00:00

Merge pull request #40 from CCC-MF/issue_37

Issue #37: Anzeige, ob Studie (technisch) in Onkostar aktiv ist
This commit is contained in:
2023-08-29 06:34:54 +02:00
committed by GitHub
6 changed files with 79 additions and 16 deletions

View File

@ -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<Studie> getStudien(Map<String, Object> 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());
}
}

View File

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

View File

@ -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<Studie> 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<Studie> 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<Studie> findActive() {
return findAll().stream().filter(Studie::isActive).collect(Collectors.toList());
}
@Override
public List<Studie> findActiveByQuery(String query) {
return findByQuery(query).stream().filter(Studie::isActive).collect(Collectors.toList());
}
}

View File

@ -21,4 +21,19 @@ public interface StudienService {
*/
List<Studie> findByQuery(String query);
/**
* Übergibt eine Liste mit aktiven Studien
*
* @return Liste mit aktiven Studien
*/
List<Studie> 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<Studie> findActiveByQuery(String query);
}

View File

@ -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<String, Object>();
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");
}

View File

@ -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);