From c093720a07810c246c01240558e0cfb0926974fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Fri, 15 Mar 2024 15:08:24 +0100 Subject: [PATCH] Deleting of Tasks, Taskseries and TaskSerieItems --- .../timemanager/tasks/TaskEntityInfo.java | 7 +- .../timemanager/tasks/TaskOverviewInfo.java | 7 +- .../timemanager/tasks/TaskShortInfo.java | 8 ++- .../timemanager/tasks/TaskTaskgroupInfo.java | 7 +- .../java/core/entities/timemanager/Task.java | 15 ++--- .../core/entities/timemanager/TaskSerie.java | 18 ++++-- .../entities/timemanager/TaskSerieItem.java | 64 +++++++++++++++++++ .../timemanager/TaskSerieItemRepository.java | 9 +++ .../java/core/services/TaskSeriesService.java | 37 +++++++++-- .../main/java/core/services/TaskService.java | 14 ++-- 10 files changed, 158 insertions(+), 28 deletions(-) create mode 100644 backend/src/main/java/core/entities/timemanager/TaskSerieItem.java create mode 100644 backend/src/main/java/core/repositories/timemanager/TaskSerieItemRepository.java diff --git a/backend/src/main/java/core/api/models/timemanager/tasks/TaskEntityInfo.java b/backend/src/main/java/core/api/models/timemanager/tasks/TaskEntityInfo.java index 589cc3c..32cc1f5 100644 --- a/backend/src/main/java/core/api/models/timemanager/tasks/TaskEntityInfo.java +++ b/backend/src/main/java/core/api/models/timemanager/tasks/TaskEntityInfo.java @@ -2,6 +2,7 @@ package core.api.models.timemanager.tasks; import core.api.models.timemanager.taskgroup.TaskgroupEntityInfo; import core.entities.timemanager.Task; +import core.services.TaskSeriesService; import java.time.LocalDate; @@ -30,7 +31,11 @@ public class TaskEntityInfo { public TaskEntityInfo(Task task) { this.taskID = task.getTaskID(); - this.taskName = task.getTaskName(); + if(task.getTaskSerieItem() != null) { + this.taskName = TaskSeriesService.insertNameIndex(task.getTaskSerieItem().getSeriesIndex(), task.getTaskName()); + } else { + this.taskName = task.getTaskName(); + } this.eta = task.getEta(); this.startDate = task.getStartDate(); this.deadline = task.getDeadline(); diff --git a/backend/src/main/java/core/api/models/timemanager/tasks/TaskOverviewInfo.java b/backend/src/main/java/core/api/models/timemanager/tasks/TaskOverviewInfo.java index be7df3a..18ec648 100644 --- a/backend/src/main/java/core/api/models/timemanager/tasks/TaskOverviewInfo.java +++ b/backend/src/main/java/core/api/models/timemanager/tasks/TaskOverviewInfo.java @@ -3,6 +3,7 @@ package core.api.models.timemanager.tasks; import core.api.models.timemanager.taskgroup.TaskgroupEntityInfo; import core.entities.timemanager.Task; import core.entities.timemanager.Taskgroup; +import core.services.TaskSeriesService; import java.time.LocalDate; import java.util.List; @@ -20,7 +21,11 @@ public class TaskOverviewInfo { public TaskOverviewInfo(Task task) { this.taskID = task.getTaskID(); - this.taskName = task.getTaskName(); + if(task.getTaskSerieItem() != null) { + this.taskName = TaskSeriesService.insertNameIndex(task.getTaskSerieItem().getSeriesIndex(), task.getTaskName()); + } else { + this.taskName = task.getTaskName(); + } this.activeMinutes = task.getWorkTime(); this.eta = task.getEta(); this.limit = task.getDeadline(); diff --git a/backend/src/main/java/core/api/models/timemanager/tasks/TaskShortInfo.java b/backend/src/main/java/core/api/models/timemanager/tasks/TaskShortInfo.java index e422128..140ad71 100644 --- a/backend/src/main/java/core/api/models/timemanager/tasks/TaskShortInfo.java +++ b/backend/src/main/java/core/api/models/timemanager/tasks/TaskShortInfo.java @@ -1,6 +1,7 @@ package core.api.models.timemanager.tasks; import core.entities.timemanager.Task; +import core.services.TaskSeriesService; public class TaskShortInfo { @@ -11,7 +12,12 @@ public class TaskShortInfo { public TaskShortInfo(Task task) { this.taskID = task.getTaskID(); - this.taskName = task.getTaskName(); + if(task.getTaskSerieItem() != null) { + this.taskName = TaskSeriesService.insertNameIndex(task.getTaskSerieItem().getSeriesIndex(), task.getTaskName()); + } else { + this.taskName = task.getTaskName(); + } + this.finishable = task.isFinishable(); } diff --git a/backend/src/main/java/core/api/models/timemanager/tasks/TaskTaskgroupInfo.java b/backend/src/main/java/core/api/models/timemanager/tasks/TaskTaskgroupInfo.java index e82bba7..e8b7e00 100644 --- a/backend/src/main/java/core/api/models/timemanager/tasks/TaskTaskgroupInfo.java +++ b/backend/src/main/java/core/api/models/timemanager/tasks/TaskTaskgroupInfo.java @@ -3,6 +3,7 @@ package core.api.models.timemanager.tasks; import core.api.models.timemanager.taskgroup.TaskgroupEntityInfo; import core.entities.timemanager.Task; import core.entities.timemanager.Taskgroup; +import core.services.TaskSeriesService; import java.time.LocalDate; import java.util.ArrayList; @@ -31,7 +32,11 @@ public class TaskTaskgroupInfo { public TaskTaskgroupInfo(Task task) { this.taskID = task.getTaskID(); - this.taskName = task.getTaskName(); + if(task.getTaskSerieItem() != null) { + this.taskName = TaskSeriesService.insertNameIndex(task.getTaskSerieItem().getSeriesIndex(), task.getTaskName()); + } else { + this.taskName = task.getTaskName(); + } this.eta = task.getEta(); this.startDate = task.getStartDate(); this.deadline = task.getDeadline(); diff --git a/backend/src/main/java/core/entities/timemanager/Task.java b/backend/src/main/java/core/entities/timemanager/Task.java index 728101b..dbb92c5 100644 --- a/backend/src/main/java/core/entities/timemanager/Task.java +++ b/backend/src/main/java/core/entities/timemanager/Task.java @@ -30,9 +30,8 @@ public class Task { @OneToMany(mappedBy = "task", cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true) private List basicTaskSchedules; private int workTime; - @ManyToOne - @JoinColumn(referencedColumnName = "taskSerieID") - private TaskSerie taskSerie; + @OneToOne(mappedBy = "task", cascade = CascadeType.ALL, orphanRemoval = true) + private TaskSerieItem taskSerieItem; public Task() { this.basicTaskSchedules = new ArrayList<>(); @@ -131,12 +130,12 @@ public class Task { this.taskID = taskID; } - public TaskSerie getTaskSerie() { - return taskSerie; + public TaskSerieItem getTaskSerieItem() { + return taskSerieItem; } - public void setTaskSerie(TaskSerie taskSerie) { - this.taskSerie = taskSerie; + public void setTaskSerieItem(TaskSerieItem taskSerieItem) { + this.taskSerieItem = taskSerieItem; } public List getBasicTaskSchedules() { @@ -155,7 +154,7 @@ public class Task { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Task task = (Task) o; - return taskID == task.taskID && eta == task.eta && finished == task.finished && workTime == task.workTime && Objects.equals(taskgroup, task.taskgroup) && Objects.equals(taskName, task.taskName) && Objects.equals(startDate, task.startDate) && Objects.equals(deadline, task.deadline); + return taskID == task.taskID; } @Override diff --git a/backend/src/main/java/core/entities/timemanager/TaskSerie.java b/backend/src/main/java/core/entities/timemanager/TaskSerie.java index f317f34..bc12ba1 100644 --- a/backend/src/main/java/core/entities/timemanager/TaskSerie.java +++ b/backend/src/main/java/core/entities/timemanager/TaskSerie.java @@ -12,8 +12,8 @@ public class TaskSerie { @GeneratedValue(strategy = GenerationType.AUTO) private long taskSerieID; - @OneToMany(orphanRemoval = false, cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "taskSerie") - List tasks = new ArrayList<>(); + @OneToMany(fetch = FetchType.EAGER, mappedBy = "taskSerie") + List tasks = new ArrayList<>(); @@ -22,15 +22,21 @@ public class TaskSerie { return taskSerieID; } - public List getTasks() { + public void setTaskSerieID(long taskSerieID) { + this.taskSerieID = taskSerieID; + } + + public List getTasks() { return tasks; } - public void setTasks(List tasks) { + public void setTasks(List tasks) { this.tasks = tasks; } - public void addTask(Task task) { - this.tasks.add(task); + public TaskSerieItem addTask(Task task) { + TaskSerieItem taskSerieItem = new TaskSerieItem(this, task, this.tasks.size()+1); + this.tasks.add(taskSerieItem); + return taskSerieItem; } } diff --git a/backend/src/main/java/core/entities/timemanager/TaskSerieItem.java b/backend/src/main/java/core/entities/timemanager/TaskSerieItem.java new file mode 100644 index 0000000..f5d40fc --- /dev/null +++ b/backend/src/main/java/core/entities/timemanager/TaskSerieItem.java @@ -0,0 +1,64 @@ +package core.entities.timemanager; + +import javax.persistence.*; + +@Entity +@Table(name = "task_series_items") +public class TaskSerieItem { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long itemID; + + @ManyToOne() + @JoinColumn(referencedColumnName = "taskSerieID") + private TaskSerie taskSerie; + + @OneToOne + @JoinColumn(name = "task_id") + private Task task; + + + private int seriesIndex; + + public TaskSerieItem(TaskSerie taskSerie, Task task, int index) { + this.taskSerie = taskSerie; + this.seriesIndex = index; + this.task = task; + } + + public TaskSerieItem() { + } + + public long getItemID() { + return itemID; + } + + public void setItemID(long itemID) { + this.itemID = itemID; + } + + public TaskSerie getTaskSerie() { + return taskSerie; + } + + public void setTaskSerie(TaskSerie taskSerie) { + this.taskSerie = taskSerie; + } + + public int getSeriesIndex() { + return seriesIndex; + } + + public void setSeriesIndex(int seriesIndex) { + this.seriesIndex = seriesIndex; + } + + public Task getTask() { + return task; + } + + public void setTask(Task task) { + this.task = task; + } +} diff --git a/backend/src/main/java/core/repositories/timemanager/TaskSerieItemRepository.java b/backend/src/main/java/core/repositories/timemanager/TaskSerieItemRepository.java new file mode 100644 index 0000000..0397bc7 --- /dev/null +++ b/backend/src/main/java/core/repositories/timemanager/TaskSerieItemRepository.java @@ -0,0 +1,9 @@ +package core.repositories.timemanager; + +import core.entities.timemanager.TaskSerieItem; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface TaskSerieItemRepository extends CrudRepository { +} diff --git a/backend/src/main/java/core/services/TaskSeriesService.java b/backend/src/main/java/core/services/TaskSeriesService.java index f4078de..e0e1a9a 100644 --- a/backend/src/main/java/core/services/TaskSeriesService.java +++ b/backend/src/main/java/core/services/TaskSeriesService.java @@ -5,18 +5,25 @@ import core.api.models.timemanager.tasks.repeatinginfo.TaskRepeatDayInfo; 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.repositories.timemanager.TaskRepository; +import core.repositories.timemanager.TaskSerieItemRepository; import core.repositories.timemanager.TaskSeriesRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; @Service public class TaskSeriesService { @Autowired private TaskRepository taskRepository; @Autowired private TaskSeriesRepository taskSeriesRepository; + @Autowired private TaskSerieItemRepository taskSerieItemRepository; + + public ServiceExitCode createTaskSeries(Task rootTask, TaskRepeatWeekInfo taskRepeatInfo) { return ServiceExitCode.OK; @@ -27,9 +34,13 @@ public class TaskSeriesService { return ServiceExitCode.INVALID_PARAMETER; } - rootTask.setTaskName(rootTask.getTaskName().replace("${i}", convertIndexToString(1))); + List taskList = new ArrayList<>(); + taskList.add(rootTask); LocalDate currentTaskDate = rootTask.getStartDate().plusDays(taskRepeatInfo.getOffset()); TaskSerie taskSerie = new TaskSerie(); + + TaskSerieItem rootItem = taskSerie.addTask(rootTask); + rootTask.setTaskSerieItem(rootItem); int index = 2; while(currentTaskDate.isBefore(taskRepeatInfo.getEndingDate())) { Task task = Task.cloneTask(rootTask); @@ -39,18 +50,30 @@ public class TaskSeriesService { } else if(taskRepeatInfo.getDeadlineStrategy() == DeadlineStrategy.DEADLINE_FIT_START) { task.setDeadline(currentTaskDate.plusDays(taskRepeatInfo.getOffset()-1)); } - taskSerie.addTask(task); - task.setTaskSerie(taskSerie); - task.setTaskName(task.getTaskName().replace("${i}", convertIndexToString(index))); + TaskSerieItem taskSerieItem = taskSerie.addTask(task); + taskList.add(task); + task.setTaskSerieItem(taskSerieItem); currentTaskDate = currentTaskDate.plusDays(taskRepeatInfo.getOffset()); index++; } taskSeriesRepository.save(taskSerie); - taskRepository.saveAll(taskSerie.getTasks()); + taskRepository.saveAll(taskList); + taskSerieItemRepository.saveAll(taskSerie.getTasks()); + return ServiceExitCode.OK; } + public void deleteTaskSeriesItem(Task task) { + TaskSerieItem item = task.getTaskSerieItem(); + TaskSerie taskSerie = task.getTaskSerieItem().getTaskSerie(); + task.setTaskSerieItem(null); + taskSerieItemRepository.delete(item); + if(taskSerie.getTasks().size() == 1) { + taskSeriesRepository.delete(taskSerie); + } + } + public static String convertIndexToString(int index) { if(index < 10) { return "0" + index; @@ -58,4 +81,8 @@ public class TaskSeriesService { return String.valueOf(index); } } + + public static String insertNameIndex(int seriesIndex, String taskName) { + return taskName.replaceAll("\\$\\{i}", convertIndexToString(seriesIndex)); + } } diff --git a/backend/src/main/java/core/services/TaskService.java b/backend/src/main/java/core/services/TaskService.java index 73f9336..8677e1d 100644 --- a/backend/src/main/java/core/services/TaskService.java +++ b/backend/src/main/java/core/services/TaskService.java @@ -6,6 +6,8 @@ import core.entities.timemanager.AbstractSchedule; import core.entities.timemanager.Task; import core.entities.timemanager.Taskgroup; import core.repositories.timemanager.TaskRepository; +import core.repositories.timemanager.TaskSerieItemRepository; +import core.repositories.timemanager.TaskSeriesRepository; import core.repositories.timemanager.TaskgroupRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -20,13 +22,17 @@ public class TaskService { private final TaskScheduleService taskScheduleService; private final TaskgroupRepository taskgroupRepository; + private final TaskSeriesService taskSeriesService; + public TaskService(@Autowired TaskRepository taskRepository, @Autowired TaskScheduleService taskScheduleService, - TaskgroupRepository taskgroupRepository) { + @Autowired TaskgroupRepository taskgroupRepository, + @Autowired TaskSeriesService taskSeriesService) { this.taskRepository = taskRepository; this.taskScheduleService = taskScheduleService; this.taskgroupRepository = taskgroupRepository; + this.taskSeriesService = taskSeriesService; } public ServiceResult createTask(Taskgroup taskgroup, TaskFieldInfo taskFieldInfo) { @@ -86,13 +92,11 @@ public class TaskService { } public void deleteTask(Task task) { - //taskScheduleService.deleteScheduleByTask(task); - System.err.println(task.getTaskID()); task.getTaskgroup().getTasks().remove(task); taskgroupRepository.save(task.getTaskgroup()); - task.setTaskgroup(null); - taskRepository.save(task); + taskSeriesService.deleteTaskSeriesItem(task); taskRepository.delete(task); + } public void clearTasks(Taskgroup taskgroup) {