From fee6dd21158c605204f797b4b0187d7272ec171a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?M=C3=A1rio=20Mur=C3=ADn?= <xmurin@fi.muni.cz>
Date: Fri, 5 Jul 2024 16:07:49 +0200
Subject: [PATCH] Add validation for reviving an instance

---
 .../service/training/TrainingInstanceService.java        | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingInstanceService.java b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingInstanceService.java
index 7aebe488..c965a1b2 100644
--- a/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingInstanceService.java
+++ b/src/main/java/cz/muni/ics/kypo/training/adaptive/service/training/TrainingInstanceService.java
@@ -135,6 +135,7 @@ public class TrainingInstanceService {
     public String update(TrainingInstance trainingInstanceToUpdate) {
         validateStartAndEndTime(trainingInstanceToUpdate);
         TrainingInstance trainingInstance = findById(trainingInstanceToUpdate.getId());
+        checkNotRevivingAnExpiredInstance(trainingInstanceToUpdate, trainingInstance);
         //add original organizers to update
         trainingInstanceToUpdate.setOrganizers(new HashSet<>(trainingInstance.getOrganizers()));
         addLoggedInUserAsOrganizerToTrainingInstance(trainingInstanceToUpdate);
@@ -176,6 +177,14 @@ public class TrainingInstanceService {
         }
     }
 
+    private void checkNotRevivingAnExpiredInstance(TrainingInstance trainingInstanceToUpdate, TrainingInstance currentTrainingInstance) {
+        if (currentTrainingInstance.finished() && !trainingInstanceToUpdate.finished()) {
+            throw new EntityConflictException(new EntityErrorDetail(TrainingInstance.class, "id",
+                    trainingInstanceToUpdate.getId().getClass(), trainingInstanceToUpdate.getId(),
+                    "End time of an expired instance cannot be set to the future."));
+        }
+    }
+
     private void checkChangedFieldsOfTrainingInstance(TrainingInstance trainingInstanceToUpdate, TrainingInstance currentTrainingInstance) {
         if (!currentTrainingInstance.getStartTime().equals(trainingInstanceToUpdate.getStartTime())) {
             throw new EntityConflictException(new EntityErrorDetail(TrainingInstance.class, "id", Long.class, trainingInstanceToUpdate.getId(),
-- 
GitLab