schedule-refactor #45
@ -6,6 +6,7 @@ import core.api.models.timemanager.taskSchedule.BasicScheduleFieldInfo;
|
|||||||
import core.api.models.timemanager.taskSchedule.BasicScheduleInfo;
|
import core.api.models.timemanager.taskSchedule.BasicScheduleInfo;
|
||||||
import core.api.models.timemanager.taskSchedule.ScheduleFieldInfo;
|
import core.api.models.timemanager.taskSchedule.ScheduleFieldInfo;
|
||||||
import core.entities.timemanager.AbstractSchedule;
|
import core.entities.timemanager.AbstractSchedule;
|
||||||
|
import core.entities.timemanager.BasicTaskSchedule;
|
||||||
import core.entities.timemanager.Task;
|
import core.entities.timemanager.Task;
|
||||||
import core.services.*;
|
import core.services.*;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -66,4 +67,27 @@ public class ScheduleController {
|
|||||||
return ResponseEntity.status(400).body(new SimpleStatusResponse("failed"));
|
return ResponseEntity.status(400).body(new SimpleStatusResponse("failed"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/schedules/{scheduleID}")
|
||||||
|
public ResponseEntity<?> editSchedule(@PathVariable long scheduleID, @RequestBody @Valid ScheduleFieldInfo scheduleFieldInfo) {
|
||||||
|
PermissionResult<AbstractSchedule> 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"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(permissionResult.getResult() instanceof BasicTaskSchedule && scheduleFieldInfo instanceof BasicScheduleFieldInfo) {
|
||||||
|
ServiceResult<AbstractSchedule> updatedSchedule = taskScheduleService.editBasicSchedule((BasicTaskSchedule) permissionResult.getResult(), (BasicScheduleFieldInfo) scheduleFieldInfo);
|
||||||
|
if(updatedSchedule.getExitCode() == ServiceExitCode.INVALID_OPERATION) {
|
||||||
|
return ResponseEntity.status(400).body(new SimpleStatusResponse("failed"));
|
||||||
|
} else {
|
||||||
|
return ResponseEntity.ok(updatedSchedule.getResult().toScheduleInfo());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ResponseEntity.status(400).body(new SimpleStatusResponse("failed"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package core.services;
|
package core.services;
|
||||||
|
|
||||||
import core.api.models.timemanager.taskSchedule.BasicScheduleFieldInfo;
|
import core.api.models.timemanager.taskSchedule.BasicScheduleFieldInfo;
|
||||||
|
import core.api.models.timemanager.taskSchedule.BasicScheduleInfo;
|
||||||
import core.api.models.timemanager.taskSchedule.ScheduleFieldInfo;
|
import core.api.models.timemanager.taskSchedule.ScheduleFieldInfo;
|
||||||
import core.entities.User;
|
import core.entities.User;
|
||||||
import core.entities.timemanager.AbstractSchedule;
|
import core.entities.timemanager.AbstractSchedule;
|
||||||
@ -35,4 +36,19 @@ public class TaskScheduleService {
|
|||||||
|
|
||||||
return new ServiceResult<>(basicTaskSchedule);
|
return new ServiceResult<>(basicTaskSchedule);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PermissionResult<AbstractSchedule> getSchedulePermissions(long scheduleID, String username) {
|
||||||
|
Optional<AbstractSchedule> abstractSchedule = scheduleRepository.findById(scheduleID);
|
||||||
|
return abstractSchedule.map(schedule -> new PermissionResult<>(schedule, schedule.getTask().getTaskgroup().getUser().getUsername().equals(username))).orElseGet(() -> new PermissionResult<>(ServiceExitCode.MISSING_ENTITY));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServiceResult<AbstractSchedule> editBasicSchedule(BasicTaskSchedule schedule, BasicScheduleFieldInfo scheduleFieldInfo) {
|
||||||
|
if(schedule.getTask().isFinished() || scheduleFieldInfo.getScheduleDate().isBefore(LocalDate.now())) {
|
||||||
|
return new ServiceResult<>(ServiceExitCode.INVALID_OPERATION);
|
||||||
|
}
|
||||||
|
|
||||||
|
schedule.setScheduleDate(scheduleFieldInfo.getScheduleDate());
|
||||||
|
scheduleRepository.save(schedule);
|
||||||
|
return new ServiceResult<>(schedule);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,9 +23,7 @@ import java.time.LocalDate;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||||
import static org.hibernate.validator.internal.util.Contracts.assertTrue;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
@Transactional
|
@Transactional
|
||||||
@ -75,4 +73,26 @@ public class ScheduleServiceTest {
|
|||||||
assertEquals(ServiceExitCode.OK, result_3.getExitCode());
|
assertEquals(ServiceExitCode.OK, result_3.getExitCode());
|
||||||
assertThat(entityManager.find(BasicTaskSchedule.class, result_3.getResult().getScheduleID())).isNotNull();
|
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 editBasicSchedule() {
|
||||||
|
//Situation 1: Reschedule finished task
|
||||||
|
ServiceResult<AbstractSchedule> result_1 = taskScheduleService.editBasicSchedule(entityManager.find(BasicTaskSchedule.class, 2L), new BasicScheduleFieldInfo(LocalDate.now()));
|
||||||
|
assertEquals(ServiceExitCode.INVALID_OPERATION, result_1.getExitCode());
|
||||||
|
|
||||||
|
//Situation 2: Reschedule unfinished task with invalid reschedule date
|
||||||
|
ServiceResult<AbstractSchedule> result_2 = taskScheduleService.editBasicSchedule(entityManager.find(BasicTaskSchedule.class, 1L), new BasicScheduleFieldInfo(LocalDate.of(2011, 3, 4)));
|
||||||
|
assertEquals(ServiceExitCode.INVALID_OPERATION, result_2.getExitCode());
|
||||||
|
|
||||||
|
//Situation 3: Reschedule unfinished task with valid reschedule date
|
||||||
|
LocalDate oldDate = entityManager.find(BasicTaskSchedule.class, 1L).getScheduleDate();
|
||||||
|
ServiceResult<AbstractSchedule> result_3 = taskScheduleService.editBasicSchedule(entityManager.find(BasicTaskSchedule.class, 1L), new BasicScheduleFieldInfo(LocalDate.now()));
|
||||||
|
assertEquals(ServiceExitCode.OK, result_3.getExitCode());
|
||||||
|
assertNotEquals(((BasicTaskSchedule) result_3.getResult()).getScheduleDate(), oldDate);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
INSERT INTO abstract_schedule (schedule_type, scheduleid, start_time, stop_time, schedule_date, task, schedule_end, schedule_start)
|
INSERT INTO abstract_schedule (schedule_type, scheduleid, start_time, stop_time, schedule_date, task, schedule_end, schedule_start)
|
||||||
VALUES (0, 1, null, null, '2023-11-11', 1, null, null),
|
VALUES (0, 1, null, null, '2024-11-11', 1, null, null),
|
||||||
(0, 2, null, null, '2023-11-11', 2, null, null);
|
(0, 2, null, null, '2024-11-11', 2, null, null);
|
Loading…
Reference in New Issue
Block a user