diff --git a/backend/src/main/java/core/entities/timemanager/TaskSerie.java b/backend/src/main/java/core/entities/timemanager/TaskSerie.java index bc12ba1..50be1c7 100644 --- a/backend/src/main/java/core/entities/timemanager/TaskSerie.java +++ b/backend/src/main/java/core/entities/timemanager/TaskSerie.java @@ -12,7 +12,7 @@ public class TaskSerie { @GeneratedValue(strategy = GenerationType.AUTO) private long taskSerieID; - @OneToMany(fetch = FetchType.EAGER, mappedBy = "taskSerie") + @OneToMany(fetch = FetchType.EAGER, mappedBy = "taskSerie", orphanRemoval = true) List tasks = new ArrayList<>(); diff --git a/backend/src/main/java/core/repositories/timemanager/TaskRepository.java b/backend/src/main/java/core/repositories/timemanager/TaskRepository.java index d4f7268..208dbe6 100644 --- a/backend/src/main/java/core/repositories/timemanager/TaskRepository.java +++ b/backend/src/main/java/core/repositories/timemanager/TaskRepository.java @@ -20,6 +20,7 @@ public interface TaskRepository extends CrudRepository { @Modifying @Transactional + @Query(value = "DELETE FROM Task t WHERE t.taskgroup = ?1") void deleteAllByTaskgroup(Taskgroup taskgroup); @Transactional diff --git a/backend/src/main/java/core/repositories/timemanager/TaskSerieItemRepository.java b/backend/src/main/java/core/repositories/timemanager/TaskSerieItemRepository.java index 0397bc7..73e9008 100644 --- a/backend/src/main/java/core/repositories/timemanager/TaskSerieItemRepository.java +++ b/backend/src/main/java/core/repositories/timemanager/TaskSerieItemRepository.java @@ -1,9 +1,19 @@ package core.repositories.timemanager; import core.entities.timemanager.TaskSerieItem; +import core.entities.timemanager.Taskgroup; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; +import javax.transaction.Transactional; + @Repository public interface TaskSerieItemRepository extends CrudRepository { + + @Query(value = "DELETE FROM TaskSerieItem tsi WHERE tsi.task IN (SELECT t FROM Task t WHERE t.taskgroup = ?1)") + @Modifying + @Transactional + void deleteByTaskgroup(Taskgroup taskgroup); } diff --git a/backend/src/main/java/core/repositories/timemanager/TaskSeriesRepository.java b/backend/src/main/java/core/repositories/timemanager/TaskSeriesRepository.java index d03fc42..c0b7301 100644 --- a/backend/src/main/java/core/repositories/timemanager/TaskSeriesRepository.java +++ b/backend/src/main/java/core/repositories/timemanager/TaskSeriesRepository.java @@ -1,9 +1,23 @@ package core.repositories.timemanager; import core.entities.timemanager.TaskSerie; +import core.entities.timemanager.Taskgroup; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import javax.transaction.Transactional; +import java.util.List; + @Repository public interface TaskSeriesRepository extends CrudRepository { + @Query("SELECT DISTINCT ts FROM TaskSerie ts JOIN ts.tasks tsi JOIN tsi.task t WHERE t.taskgroup = :taskgroup") + List findByTaskgroup(@Param("taskgroup")Taskgroup taskgroup); + + @Modifying + @Transactional + @Query(value = "DELETE FROM TaskSerie ts WHERE ts.tasks.size = 0") + void deleteUnreferenced(); } diff --git a/backend/src/main/java/core/services/TaskSeriesService.java b/backend/src/main/java/core/services/TaskSeriesService.java index 65fa3b1..8c5614b 100644 --- a/backend/src/main/java/core/services/TaskSeriesService.java +++ b/backend/src/main/java/core/services/TaskSeriesService.java @@ -6,6 +6,7 @@ import core.api.models.timemanager.tasks.repeatinginfo.TaskRepeatWeekInfo; import core.entities.timemanager.Task; import core.entities.timemanager.TaskSerie; import core.entities.timemanager.TaskSerieItem; +import core.entities.timemanager.Taskgroup; import core.repositories.timemanager.TaskRepository; import core.repositories.timemanager.TaskSerieItemRepository; import core.repositories.timemanager.TaskSeriesRepository; @@ -40,7 +41,6 @@ public class TaskSeriesService { rootTask.setTaskSerieItem(rootItem); LocalDate currentTaskDate = rootTask.getStartDate().plusDays(taskRepeatInfo.getOffset()); - int index = 2; while(currentTaskDate.isBefore(taskRepeatInfo.getEndingDate())) { Task task = Task.cloneTask(rootTask); task.setStartDate(currentTaskDate); @@ -53,7 +53,6 @@ public class TaskSeriesService { taskList.add(task); task.setTaskSerieItem(taskSerieItem); currentTaskDate = currentTaskDate.plusDays(taskRepeatInfo.getOffset()); - index++; } taskSeriesRepository.save(taskSerie); @@ -77,6 +76,11 @@ public class TaskSeriesService { } } + public void deleteTaskSerieByTaskgroup(Taskgroup taskgroup) { + taskSerieItemRepository.deleteByTaskgroup(taskgroup); + taskSeriesRepository.deleteUnreferenced(); + } + public static String convertIndexToString(int index) { if(index < 10) { return "0" + index; diff --git a/backend/src/main/java/core/services/TaskService.java b/backend/src/main/java/core/services/TaskService.java index 8677e1d..d3b4e4a 100644 --- a/backend/src/main/java/core/services/TaskService.java +++ b/backend/src/main/java/core/services/TaskService.java @@ -100,6 +100,7 @@ public class TaskService { } public void clearTasks(Taskgroup taskgroup) { + taskSeriesService.deleteTaskSerieByTaskgroup(taskgroup); taskRepository.deleteAllByTaskgroup(taskgroup); }