From 99ae430d2b4db0912ff8f85b6cf3fdadceaa98dc Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 25 Sep 2023 11:36:21 +0200 Subject: [PATCH] Edit Taskgroup --- .../api/controller/TaskgroupController.java | 20 ++++++++++ .../timemanager/TaskgroupRepository.java | 3 +- .../java/core/services/PermissionResult.java | 40 +++++++++++++++++++ .../java/core/services/TaskgroupService.java | 24 ++++++++++- 4 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 backend/src/main/java/core/services/PermissionResult.java diff --git a/backend/src/main/java/core/api/controller/TaskgroupController.java b/backend/src/main/java/core/api/controller/TaskgroupController.java index 856edda..0448065 100644 --- a/backend/src/main/java/core/api/controller/TaskgroupController.java +++ b/backend/src/main/java/core/api/controller/TaskgroupController.java @@ -4,6 +4,7 @@ import core.api.models.auth.SimpleStatusResponse; import core.api.models.timemanager.taskgroup.TaskgroupEntityInfo; import core.api.models.timemanager.taskgroup.TaskgroupFieldInfo; import core.entities.timemanager.Taskgroup; +import core.services.PermissionResult; import core.services.ServiceExitCode; import core.services.ServiceResult; import core.services.TaskgroupService; @@ -35,4 +36,23 @@ public class TaskgroupController { return ResponseEntity.status(409).body(new SimpleStatusResponse("failed")); } } + + @PostMapping("/taskgroups/{taskgroupID}") + public ResponseEntity editTaskgroup(@PathVariable long taskgroupID, @Valid @RequestBody TaskgroupFieldInfo taskgroupFieldInfo) { + PermissionResult taskgroupPermissionResult = taskgroupService.getTaskgroupByIDAndUsername(taskgroupID, SecurityContextHolder.getContext().getAuthentication().getName()); + if(!taskgroupPermissionResult.isHasPermissions()) { + return ResponseEntity.status(403).body(new SimpleStatusResponse("failed")); + } + + if(taskgroupPermissionResult.getExitCode() == ServiceExitCode.MISSING_ENTITY) { + return ResponseEntity.status(404).body(new SimpleStatusResponse("failed")); + } + + ServiceExitCode serviceExitCode = taskgroupService.editTaskgroup(taskgroupPermissionResult.getResult(), taskgroupFieldInfo); + if(serviceExitCode == ServiceExitCode.OK) { + return ResponseEntity.ok(new SimpleStatusResponse("success")); + } else { + return ResponseEntity.status(409).body(new SimpleStatusResponse("failed")); + } + } } diff --git a/backend/src/main/java/core/repositories/timemanager/TaskgroupRepository.java b/backend/src/main/java/core/repositories/timemanager/TaskgroupRepository.java index edb84a3..ddcd272 100644 --- a/backend/src/main/java/core/repositories/timemanager/TaskgroupRepository.java +++ b/backend/src/main/java/core/repositories/timemanager/TaskgroupRepository.java @@ -1,5 +1,6 @@ package core.repositories.timemanager; +import core.entities.User; import core.entities.timemanager.Taskgroup; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; @@ -7,5 +8,5 @@ import org.springframework.stereotype.Repository; @Repository public interface TaskgroupRepository extends CrudRepository { - boolean existsByTaskgroupName(String name); + boolean existsByTaskgroupNameAndUser(String name, User user); } diff --git a/backend/src/main/java/core/services/PermissionResult.java b/backend/src/main/java/core/services/PermissionResult.java new file mode 100644 index 0000000..aafe4ef --- /dev/null +++ b/backend/src/main/java/core/services/PermissionResult.java @@ -0,0 +1,40 @@ +package core.services; + +public class PermissionResult extends ServiceResult { + + private boolean hasPermissions; + public PermissionResult(ServiceExitCode exitCode, T result) { + super(exitCode, result); + } + + public PermissionResult(T result) { + super(result); + } + + public PermissionResult(ServiceExitCode exitCode) { + super(exitCode); + } + + public PermissionResult(ServiceExitCode exitCode, T result, boolean hasPermissions) { + super(exitCode, result); + this.hasPermissions = hasPermissions; + } + + public PermissionResult(T result, boolean hasPermissions) { + super(result); + this.hasPermissions = hasPermissions; + } + + public PermissionResult(ServiceExitCode exitCode, boolean hasPermissions) { + super(exitCode); + this.hasPermissions = hasPermissions; + } + + public boolean isHasPermissions() { + return hasPermissions; + } + + public void setHasPermissions(boolean hasPermissions) { + this.hasPermissions = hasPermissions; + } +} diff --git a/backend/src/main/java/core/services/TaskgroupService.java b/backend/src/main/java/core/services/TaskgroupService.java index 2eae025..20c3579 100644 --- a/backend/src/main/java/core/services/TaskgroupService.java +++ b/backend/src/main/java/core/services/TaskgroupService.java @@ -9,6 +9,7 @@ import core.repositories.UserRepository; import core.repositories.timemanager.TaskgroupRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.config.Task; +import org.springframework.security.core.parameters.P; import org.springframework.stereotype.Service; import java.util.NoSuchElementException; @@ -25,13 +26,19 @@ public class TaskgroupService { this.userRepository = userRepository; } + public PermissionResult getTaskgroupByIDAndUsername(long taskgroupID, String username) { + Optional taskgroup = taskgroupRepository.findById(taskgroupID); + return taskgroup.map(value -> new PermissionResult<>(value, value.getUser().getUsername().equals(username))).orElseGet(() -> + new PermissionResult<>(ServiceExitCode.MISSING_ENTITY)); + } + public ServiceResult addTaskgroup(TaskgroupFieldInfo taskData, String username) { Optional user = userRepository.findByUsername(username); if(user.isEmpty()) { throw new NoSuchElementException(); } - if(!taskgroupRepository.existsByTaskgroupName(taskData.getName())) { + if(!taskgroupRepository.existsByTaskgroupNameAndUser(taskData.getName(), user.get())) { Taskgroup taskgroup = new Taskgroup(taskData.getName(), user.get()); taskgroupRepository.save(taskgroup); @@ -40,4 +47,19 @@ public class TaskgroupService { return new ServiceResult<>(ServiceExitCode.ENTITY_ALREADY_EXIST); } } + + public ServiceExitCode editTaskgroup(Taskgroup taskgroup, TaskgroupFieldInfo taskgroupFieldInfo) { + if(!taskgroup.getTaskgroupName().equals(taskgroupFieldInfo.getName())) { + //Check if another taskgroup with the new name is already existent for the user of the taskgroup + if(!taskgroupRepository.existsByTaskgroupNameAndUser(taskgroupFieldInfo.getName(), taskgroup.getUser())) { + taskgroup.setTaskgroupName(taskgroupFieldInfo.getName()); + taskgroupRepository.save(taskgroup); + return ServiceExitCode.OK; + } else { + return ServiceExitCode.ENTITY_ALREADY_EXIST; + } + } else { + return ServiceExitCode.OK; + } + } }