schedule-refactor #45
@ -155,4 +155,19 @@ public class ScheduleController {
|
|||||||
ServiceResult<AbstractSchedule> serviceResult = taskScheduleService.activateSchedule(permissionResult.getResult());
|
ServiceResult<AbstractSchedule> serviceResult = taskScheduleService.activateSchedule(permissionResult.getResult());
|
||||||
return ResponseEntity.ok(new ScheduleActivateResponse(serviceResult.getResult().getStartTime()));
|
return ResponseEntity.ok(new ScheduleActivateResponse(serviceResult.getResult().getStartTime()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("schedules/{scheduleID}/stop/{finish}")
|
||||||
|
public ResponseEntity<?> stopSchedule(@PathVariable long scheduleID, @PathVariable boolean finish) {
|
||||||
|
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"));
|
||||||
|
}
|
||||||
|
|
||||||
|
ServiceResult<AbstractSchedule> serviceResult = taskScheduleService.stopSchedule(permissionResult.getResult(), finish);
|
||||||
|
return ResponseEntity.ok(new TaskScheduleStopResponse(serviceResult.getResult().getActiveTime()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
package core.api.models.timemanager.taskSchedule;
|
||||||
|
|
||||||
|
public class TaskScheduleStopResponse {
|
||||||
|
|
||||||
|
private int activeTime;
|
||||||
|
|
||||||
|
public TaskScheduleStopResponse(int activeTime) {
|
||||||
|
this.activeTime = activeTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getActiveTime() {
|
||||||
|
return activeTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setActiveTime(int activeTime) {
|
||||||
|
this.activeTime = activeTime;
|
||||||
|
}
|
||||||
|
}
|
@ -3,6 +3,7 @@ package core.entities.timemanager;
|
|||||||
import core.api.models.timemanager.taskSchedule.ScheduleInfo;
|
import core.api.models.timemanager.taskSchedule.ScheduleInfo;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
import java.time.Duration;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@ -91,4 +92,18 @@ public abstract class AbstractSchedule {
|
|||||||
public boolean isActive() {
|
public boolean isActive() {
|
||||||
return startTime != null && stopTime == null;
|
return startTime != null && stopTime == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getActiveTime() {
|
||||||
|
if(startTime == null) {
|
||||||
|
return 0;
|
||||||
|
} else if(stopTime == null) {
|
||||||
|
return (int) Duration.between(startTime, LocalDateTime.now()).toMinutes();
|
||||||
|
} else {
|
||||||
|
return (int) Duration.between(startTime, stopTime).toMinutes();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isStartable() {
|
||||||
|
return startTime == null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package core.entities.timemanager;
|
|||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -153,11 +154,21 @@ public class Task {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasActiveSchedule() {
|
public boolean hasActiveSchedule() {
|
||||||
for(AbstractSchedule schedule : getBasicTaskSchedules()) {
|
for (AbstractSchedule schedule : getBasicTaskSchedules()) {
|
||||||
if(schedule.isActive()) {
|
if (schedule.isActive()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<AbstractSchedule> getStartableSchedules() {
|
||||||
|
List<AbstractSchedule> abstractSchedules = new ArrayList<>();
|
||||||
|
for(AbstractSchedule schedule : getBasicTaskSchedules()) {
|
||||||
|
if(schedule.isStartable()) {
|
||||||
|
abstractSchedules.add(schedule);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return abstractSchedules;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,17 @@
|
|||||||
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.entities.User;
|
|
||||||
import core.entities.timemanager.AbstractSchedule;
|
import core.entities.timemanager.AbstractSchedule;
|
||||||
import core.entities.timemanager.BasicTaskSchedule;
|
import core.entities.timemanager.BasicTaskSchedule;
|
||||||
import core.entities.timemanager.Task;
|
import core.entities.timemanager.Task;
|
||||||
import core.repositories.UserRepository;
|
import core.repositories.UserRepository;
|
||||||
import core.repositories.timemanager.ScheduleRepository;
|
import core.repositories.timemanager.ScheduleRepository;
|
||||||
|
import core.repositories.timemanager.TaskRepository;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@ -24,6 +21,8 @@ public class TaskScheduleService {
|
|||||||
|
|
||||||
@Autowired private ScheduleRepository scheduleRepository;
|
@Autowired private ScheduleRepository scheduleRepository;
|
||||||
@Autowired private UserRepository userRepository;
|
@Autowired private UserRepository userRepository;
|
||||||
|
@Autowired
|
||||||
|
private TaskRepository taskRepository;
|
||||||
|
|
||||||
public List<AbstractSchedule> getAllSchedulesOfUser(String username) {
|
public List<AbstractSchedule> getAllSchedulesOfUser(String username) {
|
||||||
return scheduleRepository.findAllByUsername(username);
|
return scheduleRepository.findAllByUsername(username);
|
||||||
@ -107,4 +106,20 @@ public class TaskScheduleService {
|
|||||||
}
|
}
|
||||||
return new ServiceResult<>(schedule);
|
return new ServiceResult<>(schedule);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ServiceResult<AbstractSchedule> stopSchedule(AbstractSchedule schedule, boolean finish) {
|
||||||
|
if(schedule.getStartTime() != null && schedule.getStopTime() == null) {
|
||||||
|
schedule.setStopTime(LocalDateTime.now());
|
||||||
|
scheduleRepository.save(schedule);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(finish) {
|
||||||
|
schedule.getTask().setFinished(true);
|
||||||
|
taskRepository.save(schedule.getTask());
|
||||||
|
|
||||||
|
List<AbstractSchedule> startableSchedules = schedule.getTask().getStartableSchedules();
|
||||||
|
scheduleRepository.deleteAll(startableSchedules);
|
||||||
|
}
|
||||||
|
return new ServiceResult<>(schedule);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -178,4 +178,29 @@ public class ScheduleServiceTest {
|
|||||||
assertNotNull(result_2.getResult().getStartTime());
|
assertNotNull(result_2.getResult().getStartTime());
|
||||||
assertNull(result_2.getResult().getStopTime());
|
assertNull(result_2.getResult().getStopTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SqlGroup({
|
||||||
|
@Sql("classpath:taskgroupRepositoryTestEntries.sql"),
|
||||||
|
@Sql("classpath:taskRepositoryEntries.sql"),
|
||||||
|
@Sql("classpath:basicScheduleEntries.sql")
|
||||||
|
})
|
||||||
|
void stopSchedule() {
|
||||||
|
//Stop schedule that is not running 4
|
||||||
|
ServiceResult<AbstractSchedule> result_1 = taskScheduleService.stopSchedule(entityManager.find(BasicTaskSchedule.class, 5L), false);
|
||||||
|
assertNull(result_1.getResult().getStartTime());
|
||||||
|
assertNull(result_1.getResult().getStopTime());
|
||||||
|
|
||||||
|
//Stop schedule (without finishing)
|
||||||
|
ServiceResult<AbstractSchedule> result_2 = taskScheduleService.stopSchedule(entityManager.find(BasicTaskSchedule.class, 4L), false);
|
||||||
|
assertNotNull(result_2.getResult().getStartTime());
|
||||||
|
assertNotNull(result_2.getResult().getStopTime());
|
||||||
|
|
||||||
|
//Stop schedule with finishing
|
||||||
|
ServiceResult<AbstractSchedule> result_3 = taskScheduleService.stopSchedule(entityManager.find(BasicTaskSchedule.class, 7L), true);
|
||||||
|
assertNotNull(result_3.getResult().getStartTime());
|
||||||
|
assertNotNull(result_3.getResult().getStopTime());
|
||||||
|
assertTrue(result_3.getResult().getTask().isFinished());
|
||||||
|
assertFalse(result_3.getResult().isStartable());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,4 +3,6 @@ VALUES (0, 1, null, null, '2024-11-11', 1, null, null),
|
|||||||
(0, 2, null, null, '2024-11-11', 2, null, null),
|
(0, 2, null, null, '2024-11-11', 2, null, null),
|
||||||
(0, 3, '2023-10-10', '2023-10-10', '2024-11-11', 1, null, null),
|
(0, 3, '2023-10-10', '2023-10-10', '2024-11-11', 1, null, null),
|
||||||
(0, 4, '2023-10-10', null, '2024-11-11', 3, null, null),
|
(0, 4, '2023-10-10', null, '2024-11-11', 3, null, null),
|
||||||
(0, 5, null, null, '2024-11-11', 5, null, null);
|
(0, 5, null, null, '2024-11-11', 5, null, null),
|
||||||
|
(0, 6, '2023-10-10', null, '2024-11-11', 16, null, null),
|
||||||
|
(0, 7, '2023-10-10', null, '2024-11-11', 16, null, null);
|
@ -17,3 +17,5 @@ INSERT INTO tasks (taskid, deadline, eta, start_date, task_name, taskgroup_id, f
|
|||||||
INSERT INTO tasks (taskid, deadline, eta, start_date, task_name, taskgroup_id, finished, work_time) VALUES (13, NULL, 0, '2022-03-20', 'Task 6', 2, true, 0);
|
INSERT INTO tasks (taskid, deadline, eta, start_date, task_name, taskgroup_id, finished, work_time) VALUES (13, NULL, 0, '2022-03-20', 'Task 6', 2, true, 0);
|
||||||
INSERT INTO tasks (taskid, deadline, eta, start_date, task_name, taskgroup_id, finished, work_time) VALUES (14, '2044-03-20', 0, '2022-03-20', 'Task 6', 2, true, 0);
|
INSERT INTO tasks (taskid, deadline, eta, start_date, task_name, taskgroup_id, finished, work_time) VALUES (14, '2044-03-20', 0, '2022-03-20', 'Task 6', 2, true, 0);
|
||||||
INSERT INTO tasks (taskid, deadline, eta, start_date, task_name, taskgroup_id, finished, work_time) VALUES (15, NULL, 0, NULL, 'Task 15', 2, false, 0);
|
INSERT INTO tasks (taskid, deadline, eta, start_date, task_name, taskgroup_id, finished, work_time) VALUES (15, NULL, 0, NULL, 'Task 15', 2, false, 0);
|
||||||
|
|
||||||
|
INSERT INTO tasks (taskid, deadline, eta, start_date, task_name, taskgroup_id, finished, work_time) VALUES (16, NULL, 0, NULL, 'Task 15', 9, false, 0);
|
@ -1,5 +1,6 @@
|
|||||||
INSERT INTO users (id, username, email, password) VALUES (1, 'Testuser1', 'test1@test.com', '123456');
|
INSERT INTO users (id, username, email, password) VALUES (1, 'Testuser1', 'test1@test.com', '123456');
|
||||||
INSERT INTO users (id, username, email, password) VALUES (2, 'Testuser2', 'test2@test.com', '123456');
|
INSERT INTO users (id, username, email, password) VALUES (2, 'Testuser2', 'test2@test.com', '123456');
|
||||||
|
INSERT INTO users (id, username, email, password) VALUES (3, 'Testuser3', 'test3@test.com', '123456');
|
||||||
|
|
||||||
INSERT INTO taskgroups (taskgroupid, name, parent_id, taskgroupuser) VALUES (1, 'No children', null, 1);
|
INSERT INTO taskgroups (taskgroupid, name, parent_id, taskgroupuser) VALUES (1, 'No children', null, 1);
|
||||||
INSERT INTO taskgroups (taskgroupid, name, parent_id, taskgroupuser) VALUES (2, 'Taskgroup 1', null, 1);
|
INSERT INTO taskgroups (taskgroupid, name, parent_id, taskgroupuser) VALUES (2, 'Taskgroup 1', null, 1);
|
||||||
@ -10,3 +11,5 @@ INSERT INTO taskgroups (taskgroupid, name, parent_id, taskgroupuser) VALUES (5,
|
|||||||
INSERT INTO taskgroups (taskgroupid, name, parent_id, taskgroupuser) VALUES (6, 'Taskgroup 2.1', 5, 1);
|
INSERT INTO taskgroups (taskgroupid, name, parent_id, taskgroupuser) VALUES (6, 'Taskgroup 2.1', 5, 1);
|
||||||
INSERT INTO taskgroups (taskgroupid, name, parent_id, taskgroupuser) VALUES (7, 'Taskgroup 2.2', 5, 1);
|
INSERT INTO taskgroups (taskgroupid, name, parent_id, taskgroupuser) VALUES (7, 'Taskgroup 2.2', 5, 1);
|
||||||
INSERT INTO taskgroups (taskgroupid, name, parent_id, taskgroupuser) VALUES (8, 'Taskgroup 2.1.2', 6, 1);
|
INSERT INTO taskgroups (taskgroupid, name, parent_id, taskgroupuser) VALUES (8, 'Taskgroup 2.1.2', 6, 1);
|
||||||
|
|
||||||
|
INSERT INTO taskgroups (taskgroupid, name, parent_id, taskgroupuser) VALUES (9, 'Taskgroup 1', null, 3);
|
Loading…
Reference in New Issue
Block a user