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

Issue #4: Backend-Service-Methode zum Abfragen von Studien hinzugefügt

This commit is contained in:
2023-03-14 14:15:30 +01:00
parent f73d5dc423
commit fcb7e6c14d
4 changed files with 88 additions and 4 deletions

View File

@ -1,6 +1,8 @@
package DNPM.analyzer;
import DNPM.services.FormService;
import DNPM.services.Studie;
import DNPM.services.StudienService;
import de.itc.onkostar.api.Disease;
import de.itc.onkostar.api.IOnkostarApi;
import de.itc.onkostar.api.Item;
@ -13,6 +15,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@ -30,9 +34,12 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer {
private final FormService formService;
public TherapieplanAnalyzer(final IOnkostarApi onkostarApi, final FormService formService) {
private final StudienService studienService;
public TherapieplanAnalyzer(final IOnkostarApi onkostarApi, final FormService formService, final StudienService studienService) {
this.onkostarApi = onkostarApi;
this.formService = formService;
this.studienService = studienService;
}
@Override
@ -93,6 +100,33 @@ public class TherapieplanAnalyzer implements IProcedureAnalyzer {
updateMtbInSubforms(procedure);
}
/**
* Übergibt alle Studien, deren (Kurz-)Beschreibung oder NCT-Nummer den übergebenen Eingabewert <code>q</code> enthält
*
* <p>Wurde der Eingabewert nicht angegeben oder ist leer, werden alle Studien übergeben.
*
* <p>Beispiel zur Nutzung in einem Formularscript
* <pre>
* executePluginMethod(
* 'TherapieplanAnalyzer',
* 'getStudien',
* { q: 'NCT-12' },
* (response) => console.log(response),
* false
* );
* </pre>
* @param input Map mit Eingabewerten
*/
public List<Studie> getStudien(Map<String, Object> input) {
var query = input.get("q");
if (null == query || query.toString().isBlank()) {
return studienService.findAll();
}
return studienService.findByQuery(query.toString());
}
/**
* Verlinke MTB und Übernahme Datum aus Hauptformular in weiteren Bereichen
* "Humangenetische Beratung" und "Reevaluation", wenn erforderlich.

View File

@ -6,6 +6,11 @@ import org.springframework.stereotype.Service;
import javax.sql.DataSource;
import java.util.List;
/**
* Standardimplementierung zum Ermitteln von Studien
*
* @since 0.0.2
*/
@Service
public class DefaultStudienService implements StudienService {
@ -38,11 +43,11 @@ public class DefaultStudienService implements StudienService {
+ "JOIN property_catalogue_version ON property_catalogue.id = property_catalogue_version.datacatalog_id "
+ "JOIN property_catalogue_version_entry pcve ON property_catalogue_version.id = pcve.property_version_id "
+ "LEFT JOIN studie ON pcve.id = studie.property_version_entry AND studie.aktiv "
+ "WHERE property_catalogue.name = 'OS.Studien' AND (pcve.shortdesc LIKE ? OR pcve.description LIKE ?);";
+ "WHERE property_catalogue.name = 'OS.Studien' AND (pcve.shortdesc LIKE ? OR pcve.description LIKE ? OR studie.studien_nummer LIKE ?);";
var like = String.format("%%%s%%", query);
return this.jdbcTemplate.query(sql, new Object[]{like, like}, (resultSet, i) -> new Studie(
return this.jdbcTemplate.query(sql, new Object[]{like, like, like}, (resultSet, i) -> new Studie(
resultSet.getString(1),
resultSet.getString(2),
resultSet.getString(3),

View File

@ -4,8 +4,19 @@ import java.util.List;
public interface StudienService {
/**
* Übergibt eine Liste mit allen Studien
*
* @return Liste mit allen Studien
*/
List<Studie> findAll();
/**
* Übergibt eine Liste mit Studien, deren (Kurz-)Beschreibung oder Studiennummer den übergebenen Wert enthalten
*
* @param query Wert der enthalten sein muss
* @return Gefilterte Liste mit Studien
*/
List<Studie> findByQuery(String query);
}

View File

@ -1,6 +1,7 @@
package DNPM.analyzer;
import DNPM.services.FormService;
import DNPM.services.StudienService;
import de.itc.onkostar.api.IOnkostarApi;
import de.itc.onkostar.api.Item;
import de.itc.onkostar.api.Procedure;
@ -8,11 +9,15 @@ import de.itc.onkostar.api.constants.JaNeinUnbekannt;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.*;
@ -25,11 +30,14 @@ public class TherapieplanAnalyzerTest {
@Mock
private FormService formService;
@Mock
private StudienService studienService;
private TherapieplanAnalyzer therapieplanAnalyzer;
@BeforeEach
void setUp() {
this.therapieplanAnalyzer = new TherapieplanAnalyzer(onkostarApi, formService);
this.therapieplanAnalyzer = new TherapieplanAnalyzer(onkostarApi, formService, studienService);
}
@Test
@ -67,4 +75,30 @@ public class TherapieplanAnalyzerTest {
verify(onkostarApi, never()).saveProcedure(any(Procedure.class), anyBoolean());
}
@Test
void shouldRequestAllStudienForEmptyQueryString() {
var input = Map.of("q", (Object)" ");
this.therapieplanAnalyzer.getStudien(input);
verify(studienService, times(1)).findAll();
}
@Test
void shouldRequestAllStudienForEmptyInputMap() {
var input = new HashMap<String, Object>();
this.therapieplanAnalyzer.getStudien(input);
verify(studienService, times(1)).findAll();
}
@Test
void shouldRequestFilteredStudien() {
var input = Map.of("q", (Object)"NCT-123");
this.therapieplanAnalyzer.getStudien(input);
var captor = ArgumentCaptor.forClass(String.class);
verify(studienService, times(1)).findByQuery(captor.capture());
assertThat(captor.getValue()).isEqualTo("NCT-123");
}
}