diff --git a/studymanager-services/src/main/java/io/redlink/more/studymanager/repository/ParticipantRepository.java b/studymanager-services/src/main/java/io/redlink/more/studymanager/repository/ParticipantRepository.java index 96e9bfe7..5a4c03f0 100644 --- a/studymanager-services/src/main/java/io/redlink/more/studymanager/repository/ParticipantRepository.java +++ b/studymanager-services/src/main/java/io/redlink/more/studymanager/repository/ParticipantRepository.java @@ -86,7 +86,8 @@ ON CONFLICT (study_id, participant_id) DO UPDATE SET token = excluded.token " AND p.status = 'active' " + " AND p.start IS NOT NULL " + " AND COALESCE(sg.duration, s.duration) IS NOT NULL " + - " AND (p.start + ((COALESCE(sg.duration, s.duration)->>'value')::int || ' ' || (COALESCE(sg.duration, s.duration)->>'unit'))::interval) < NOW()"; + " AND (p.start + ((COALESCE(sg.duration, s.duration)->>'value')::int || ' ' || (COALESCE(sg.duration, s.duration)->>'unit'))::interval) < NOW()" + + "GROUP BY p.study_id, p.participant_id"; /* * SQL Statements for managing participant_observation_groups mapping for participants diff --git a/studymanager-services/src/test/java/io/redlink/more/studymanager/repository/ParticipantRepositoryTest.java b/studymanager-services/src/test/java/io/redlink/more/studymanager/repository/ParticipantRepositoryTest.java index 15285859..0b1f69b8 100644 --- a/studymanager-services/src/test/java/io/redlink/more/studymanager/repository/ParticipantRepositoryTest.java +++ b/studymanager-services/src/test/java/io/redlink/more/studymanager/repository/ParticipantRepositoryTest.java @@ -17,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.scheduling.config.TaskExecutionOutcome; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; @@ -24,6 +25,7 @@ import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; +import java.time.Instant; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -189,4 +191,16 @@ void testUndefinedStudyGroup() { assertThat(participant.getStudyGroupId()).isNull(); } + @Test + @DisplayName("Participants for closing") + void testClosing() { + Study study = studyRepository.insert(new Study().setContact(new Contact().setPerson("test").setEmail("test"))); + studyRepository.setStateById(study.getStudyId(), Study.Status.ACTIVE); + Participant participant = participantRepository + .insert(new Participant().setStudyId(study.getStudyId()).setRegistrationToken("abc").setStart(Instant.now())); + participantRepository.setStatusByIds(study.getStudyId(), participant.getParticipantId(), Participant.Status.ACTIVE); + + var participants = participantRepository.listParticipantsForClosing(); + } + }