diff --git a/backend/src/main/java/core/api/controller/StatisticController.java b/backend/src/main/java/core/api/controller/StatisticController.java new file mode 100644 index 0000000..7d3be25 --- /dev/null +++ b/backend/src/main/java/core/api/controller/StatisticController.java @@ -0,0 +1,42 @@ +package core.api.controller; + +import core.api.models.timemanager.history.WorkingStatus; +import core.entities.timemanager.AbstractSchedule; +import core.services.TaskScheduleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.List; + +@CrossOrigin(origins = "*", maxAge = 3600) +@RestController +@RequestMapping("/api") +public class StatisticController { + + @Autowired private TaskScheduleService taskScheduleService; + + @GetMapping("/history/todayStatus") + public ResponseEntity loadStatusOfToday() { + boolean missedSchedules = !taskScheduleService.getAllMissedSchedulesOfUser(SecurityContextHolder.getContext().getAuthentication().getName()).isEmpty(); + List executedSchedules = taskScheduleService.getActiveSchedulesOfToday(SecurityContextHolder.getContext().getAuthentication().getName()); + int activeTime = 0; + for(AbstractSchedule schedule : executedSchedules) { + if(schedule.getStartTime().toLocalDate().isBefore(LocalDate.now())) { + activeTime += (int) Duration.between(LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT), schedule.getStopTime()).toMinutes(); + } else { + activeTime += (int) Duration.between(schedule.getStartTime(), schedule.getStopTime()).toMinutes(); + } + } + + return ResponseEntity.ok(new WorkingStatus(missedSchedules, activeTime)); + } +} diff --git a/backend/src/main/java/core/api/models/timemanager/history/WorkingStatus.java b/backend/src/main/java/core/api/models/timemanager/history/WorkingStatus.java new file mode 100644 index 0000000..7e5c6c1 --- /dev/null +++ b/backend/src/main/java/core/api/models/timemanager/history/WorkingStatus.java @@ -0,0 +1,28 @@ +package core.api.models.timemanager.history; + +public class WorkingStatus { + + private boolean missedSchedules; + private int activeTime; + + public WorkingStatus(boolean missedSchedules, int activeTime) { + this.missedSchedules = missedSchedules; + this.activeTime = activeTime; + } + + public boolean isMissedSchedules() { + return missedSchedules; + } + + public void setMissedSchedules(boolean missedSchedules) { + this.missedSchedules = missedSchedules; + } + + public int getActiveTime() { + return activeTime; + } + + public void setActiveTime(int activeTime) { + this.activeTime = activeTime; + } +} diff --git a/backend/src/main/java/core/services/TaskScheduleService.java b/backend/src/main/java/core/services/TaskScheduleService.java index a052aec..b5e0941 100644 --- a/backend/src/main/java/core/services/TaskScheduleService.java +++ b/backend/src/main/java/core/services/TaskScheduleService.java @@ -147,4 +147,14 @@ public class TaskScheduleService { } return missedSchedules; } + + public List getActiveSchedulesOfToday(String username) { + List activatedSchedules = new ArrayList<>(); + for(AbstractSchedule schedule : getAllSchedulesOfUser(username)) { + if(schedule.getStopTime() != null && schedule.getStopTime().toLocalDate().isEqual(LocalDate.now())) { + activatedSchedules.add(schedule); + } + } + return activatedSchedules; + } }