From 41c8cd9dc9d1d648244acfc36c3c94df809fa0fa Mon Sep 17 00:00:00 2001 From: Thomas Kurz Date: Wed, 21 Jun 2023 18:01:37 +0200 Subject: [PATCH] rollback study initialization if there is an error --- .../studymanager/service/StudyService.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/studymanager/src/main/java/io/redlink/more/studymanager/service/StudyService.java b/studymanager/src/main/java/io/redlink/more/studymanager/service/StudyService.java index d1a273d9..c09d2424 100644 --- a/studymanager/src/main/java/io/redlink/more/studymanager/service/StudyService.java +++ b/studymanager/src/main/java/io/redlink/more/studymanager/service/StudyService.java @@ -80,16 +80,28 @@ public void setStatus(Long studyId, Study.Status status, User user) { throw BadRequestException.StateChange(study.getStudyState(), status); } - studyRepository.setStateById(studyId, status); + Study.Status oldState = study.getStudyState(); + studyRepository.setStateById(studyId, status); studyRepository.getById(studyId).ifPresent(s -> { - interventionService.alignInterventionsWithStudyState(s); - participantService.alignParticipantsWithStudyState(s); - observationService.alignObservationsWithStudyState(s); - integrationService.alignIntegrationsWithStudyState(s); + try { + alignWithStudyState(s); + } catch (Exception e) { + //ROLLBACK + studyRepository.setStateById(studyId, oldState); + studyRepository.getById(studyId).ifPresent(this::alignWithStudyState); + throw new BadRequestException("Study cannot be initialized"); + } }); } + private void alignWithStudyState(Study s) { + interventionService.alignInterventionsWithStudyState(s); + participantService.alignParticipantsWithStudyState(s); + observationService.alignObservationsWithStudyState(s); + integrationService.alignIntegrationsWithStudyState(s); + } + public Map> getACL(Long studyId) { return aclRepository.getACL(studyId); }