From 5d550d69acbb6591e92a62a9db88d1018e7ce723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Sat, 11 Nov 2023 17:36:56 +0100 Subject: [PATCH] Activate Schedule --- .../api/controller/ScheduleController.java | 15 +++++++++++++ .../ScheduleActivateResponse.java | 22 +++++++++++++++++++ .../core/services/TaskScheduleService.java | 8 +++++++ .../core/schedules/ScheduleServiceTest.java | 21 ++++++++++++++++++ 4 files changed, 66 insertions(+) create mode 100644 backend/src/main/java/core/api/models/timemanager/taskSchedule/ScheduleActivateResponse.java diff --git a/backend/src/main/java/core/api/controller/ScheduleController.java b/backend/src/main/java/core/api/controller/ScheduleController.java index 63c4d94..156bdc5 100644 --- a/backend/src/main/java/core/api/controller/ScheduleController.java +++ b/backend/src/main/java/core/api/controller/ScheduleController.java @@ -140,4 +140,19 @@ public class ScheduleController { return ResponseEntity.status(404).body(new SimpleStatusResponse("failed")); } } + + @PostMapping("schedules/{scheduleID}/activate") + public ResponseEntity activateSchedule(@PathVariable long scheduleID) { + PermissionResult permissionResult = taskScheduleService.getSchedulePermissions(scheduleID, SecurityContextHolder.getContext().getAuthentication().getName()); + if(permissionResult.isHasPermissions()) { + return ResponseEntity.status(403).body(new SimpleStatusResponse("failed")); + } + + if(permissionResult.getExitCode() == ServiceExitCode.MISSING_ENTITY) { + return ResponseEntity.status(404).body(new SimpleStatusResponse("failed")); + } + + ServiceResult serviceResult = taskScheduleService.activateSchedule(permissionResult.getResult()); + return ResponseEntity.ok(new ScheduleActivateResponse(serviceResult.getResult().getStartTime())); + } } diff --git a/backend/src/main/java/core/api/models/timemanager/taskSchedule/ScheduleActivateResponse.java b/backend/src/main/java/core/api/models/timemanager/taskSchedule/ScheduleActivateResponse.java new file mode 100644 index 0000000..de972d0 --- /dev/null +++ b/backend/src/main/java/core/api/models/timemanager/taskSchedule/ScheduleActivateResponse.java @@ -0,0 +1,22 @@ +package core.api.models.timemanager.taskSchedule; + +import java.time.LocalDateTime; + +public class ScheduleActivateResponse { + private LocalDateTime startTime; + + public ScheduleActivateResponse(LocalDateTime startTime) { + this.startTime = startTime; + } + + public ScheduleActivateResponse() { + } + + public LocalDateTime getStartTime() { + return startTime; + } + + public void setStartTime(LocalDateTime startTime) { + this.startTime = startTime; + } +} diff --git a/backend/src/main/java/core/services/TaskScheduleService.java b/backend/src/main/java/core/services/TaskScheduleService.java index b318958..d797126 100644 --- a/backend/src/main/java/core/services/TaskScheduleService.java +++ b/backend/src/main/java/core/services/TaskScheduleService.java @@ -99,4 +99,12 @@ public class TaskScheduleService { Optional activeSchedule = scheduleRepository.getActiveScheduleOfUser(username); return activeSchedule.map(ServiceResult::new).orElseGet(() -> new ServiceResult<>(ServiceExitCode.MISSING_ENTITY)); } + + public ServiceResult activateSchedule(AbstractSchedule schedule) { + if(schedule.getStartTime() == null) { + schedule.setStartTime(LocalDateTime.now()); + scheduleRepository.save(schedule); + } + return new ServiceResult<>(schedule); + } } diff --git a/backend/src/test/java/core/schedules/ScheduleServiceTest.java b/backend/src/test/java/core/schedules/ScheduleServiceTest.java index 47ffd4e..154a92e 100644 --- a/backend/src/test/java/core/schedules/ScheduleServiceTest.java +++ b/backend/src/test/java/core/schedules/ScheduleServiceTest.java @@ -157,4 +157,25 @@ public class ScheduleServiceTest { assertEquals(ServiceExitCode.OK, result_3.getExitCode()); assertThat(entityManager.find(BasicTaskSchedule.class, result_3.getResult().getScheduleID())).isNotNull(); } + + @Test + @SqlGroup({ + @Sql("classpath:taskgroupRepositoryTestEntries.sql"), + @Sql("classpath:taskRepositoryEntries.sql"), + @Sql("classpath:basicScheduleEntries.sql") + }) + void activateSchedule() { + //Activate already running schedule + ServiceResult result_1 = taskScheduleService.activateSchedule(entityManager.find(BasicTaskSchedule.class, 4L)); + assertNotNull(result_1.getResult().getStartTime()); + assertNull(result_1.getResult().getStopTime()); + + entityManager.remove(entityManager.find(BasicTaskSchedule.class, 4L)); + assertThat(entityManager.find(BasicTaskSchedule.class, 4L)).isNull(); + + //Activate not running schedule + ServiceResult result_2 = taskScheduleService.activateSchedule(entityManager.find(BasicTaskSchedule.class, 5L)); + assertNotNull(result_2.getResult().getStartTime()); + assertNull(result_2.getResult().getStopTime()); + } }