From bebf4aca45d8223b92eecb3be5b0cf883fdb035b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Juh=C3=A1s?= <xjuhas@fi.muni.cz>
Date: Fri, 16 Aug 2024 10:31:47 +0200
Subject: [PATCH] feat: prevent deleting definition with running exercises

No API changes

Closes #209
---
 exercise_definition/lib/definition_manager.py | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/exercise_definition/lib/definition_manager.py b/exercise_definition/lib/definition_manager.py
index bd21fe1c..d83ef500 100644
--- a/exercise_definition/lib/definition_manager.py
+++ b/exercise_definition/lib/definition_manager.py
@@ -2,6 +2,7 @@ import os
 
 from django.conf import settings
 
+from common_lib.exceptions import ExerciseOperationException
 from common_lib.logger import logger
 from common_lib.utils import get_model
 from exercise.lib.exercise_manager import ExerciseManager
@@ -12,7 +13,17 @@ class DefinitionManager:
     @staticmethod
     def delete_definition(definition_id: int):
         definition = get_model(Definition, id=definition_id)
-        for exercise in definition.exercises.all():
+        exercises = definition.exercises.all()
+        running_exercise_ids = [
+            exercise.id for exercise in exercises if exercise.running
+        ]
+        if len(running_exercise_ids) != 0:
+            raise ExerciseOperationException(
+                f"Cannot delete this definition because "
+                f"these running exercises depend on it {running_exercise_ids}"
+            )
+
+        for exercise in exercises:
             ExerciseManager.delete_exercise(exercise.id)
 
         for file_info in definition.files.all():
-- 
GitLab