SEBSERV-464 fix moodle course short name change recover

This commit is contained in:
anhefti 2023-10-02 16:17:49 +02:00
parent f8706d26d4
commit ac8c7b034d

View file

@ -12,6 +12,7 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import org.joda.time.DateTime;
@ -28,6 +29,7 @@ import ch.ethz.seb.sebserver.gbl.model.exam.Exam;
import ch.ethz.seb.sebserver.gbl.model.exam.Exam.ExamStatus;
import ch.ethz.seb.sebserver.gbl.model.exam.QuizData;
import ch.ethz.seb.sebserver.gbl.model.institution.LmsSetup.Features;
import ch.ethz.seb.sebserver.gbl.model.institution.LmsSetup.LmsType;
import ch.ethz.seb.sebserver.gbl.profile.WebServiceProfile;
import ch.ethz.seb.sebserver.gbl.util.Result;
import ch.ethz.seb.sebserver.gbl.util.Utils;
@ -38,6 +40,7 @@ import ch.ethz.seb.sebserver.webservice.servicelayer.dao.ExamDAO;
import ch.ethz.seb.sebserver.webservice.servicelayer.lms.LmsAPIService;
import ch.ethz.seb.sebserver.webservice.servicelayer.lms.LmsAPITemplate;
import ch.ethz.seb.sebserver.webservice.servicelayer.lms.SEBRestrictionService;
import ch.ethz.seb.sebserver.webservice.servicelayer.lms.impl.moodle.MoodleUtils;
import ch.ethz.seb.sebserver.webservice.servicelayer.session.ExamFinishedEvent;
import ch.ethz.seb.sebserver.webservice.servicelayer.session.ExamResetEvent;
import ch.ethz.seb.sebserver.webservice.servicelayer.session.ExamStartedEvent;
@ -138,7 +141,12 @@ class ExamUpdateHandler {
.forEach(quiz -> {
try {
final Exam exam = exams.get(quiz.id);
final Exam exam = getExamForQuizWithMoodleSpecialCase(exams, quiz);
if (exam == null) {
log.warn("Failed to find map exam to fetched quiz-data: {}", quiz);
return;
}
if (hasChanges(exam, quiz)) {
@ -485,4 +493,29 @@ class ExamUpdateHandler {
}
}
private Exam getExamForQuizWithMoodleSpecialCase(final Map<String, Exam> exams, final QuizData quiz) {
Exam exam = exams.get(quiz.id);
if (exam == null) {
try {
final LmsAPITemplate lms = this.lmsAPIService
.getLmsAPITemplate(quiz.lmsSetupId)
.getOrThrow();
if (lms.getType() == LmsType.MOODLE || lms.getType() == LmsType.MOODLE_PLUGIN) {
final String quizId = MoodleUtils.getQuizId(quiz.id);
final Optional<String> find =
exams.keySet().stream().filter(key -> key.startsWith(quizId)).findFirst();
if (find.isPresent()) {
exam = exams.get(find.get());
}
}
} catch (final Exception e) {
log.error("Failed to verify changed external Exam id from moodle course: {}", e.getMessage());
}
}
return exam;
}
}