diff --git a/src/main/java/idatt2106/systemutvikling/sparesti/controller/MilestoneController.java b/src/main/java/idatt2106/systemutvikling/sparesti/controller/MilestoneController.java index 081c73cdfd621a230acc003403a78fcedd303ed6..5122ac143c0f07c9bc45b24680856cb78a361e48 100644 --- a/src/main/java/idatt2106/systemutvikling/sparesti/controller/MilestoneController.java +++ b/src/main/java/idatt2106/systemutvikling/sparesti/controller/MilestoneController.java @@ -4,12 +4,11 @@ import idatt2106.systemutvikling.sparesti.dao.ManualSavingDAO; import idatt2106.systemutvikling.sparesti.dao.MilestoneDAO; import idatt2106.systemutvikling.sparesti.dto.ManualSavingDTO; import idatt2106.systemutvikling.sparesti.dto.MilestoneDTO; -import idatt2106.systemutvikling.sparesti.service.CurrentUserService; -import idatt2106.systemutvikling.sparesti.service.ManualSavingService; -import idatt2106.systemutvikling.sparesti.service.MilestoneService; -import idatt2106.systemutvikling.sparesti.service.TransactionService; +import idatt2106.systemutvikling.sparesti.service.*; import lombok.AllArgsConstructor; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -32,12 +31,15 @@ public class MilestoneController { private final TransactionService transactionService; + private final JWTService jwtService; + @GetMapping("/user") - public ResponseEntity<List<MilestoneDTO>> getUserMilestones() { + public ResponseEntity<Page<MilestoneDTO>> getUserMilestones(@RequestHeader("Authorization") String token, Pageable pageable) { + String username = jwtService.extractUsernameFromToken(token); logger.info("Received request to get user milestones."); - return ResponseEntity.ok(milestoneService.getActiveMilestonesDTOsByUsername(CurrentUserService.getCurrentUsername())); + return ResponseEntity.ok(milestoneService.getActiveMilestonesDTOsByUsernamePaginated(username, pageable)); } @PostMapping("/create") diff --git a/src/main/java/idatt2106/systemutvikling/sparesti/controller/MilestoneLogController.java b/src/main/java/idatt2106/systemutvikling/sparesti/controller/MilestoneLogController.java index da7b91f96c86e9c44ca2afc0653e388f73d394ed..368d55eda3b67f1ae261f1ca37a3890f539dd92b 100644 --- a/src/main/java/idatt2106/systemutvikling/sparesti/controller/MilestoneLogController.java +++ b/src/main/java/idatt2106/systemutvikling/sparesti/controller/MilestoneLogController.java @@ -1,12 +1,14 @@ package idatt2106.systemutvikling.sparesti.controller; import idatt2106.systemutvikling.sparesti.dto.MilestoneDTO; +import idatt2106.systemutvikling.sparesti.service.JWTService; import idatt2106.systemutvikling.sparesti.service.MilestoneLogService; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import java.util.List; import java.util.logging.Logger; @RestController @@ -16,18 +18,20 @@ import java.util.logging.Logger; public class MilestoneLogController { Logger logger = Logger.getLogger(TokenController.class.getName()); - MilestoneLogService milestoneLogService; + JWTService jwtService; - public MilestoneLogController(MilestoneLogService milestoneLogService) { + public MilestoneLogController(MilestoneLogService milestoneLogService, JWTService jwtService) { this.milestoneLogService = milestoneLogService; + this.jwtService = jwtService; } @GetMapping("/user") - public ResponseEntity<List<MilestoneDTO>> getUserMilestones( - @RequestHeader("Authorization") String token) { + public ResponseEntity<Page<MilestoneDTO>> getUserMilestones + (@RequestHeader("Authorization") String token, Pageable pageable) { + String username = jwtService.extractUsernameFromToken(token); logger.info("Received request to get user milestones."); - return ResponseEntity.ok(milestoneLogService.getMilestoneLogsByUsername(token)); + return ResponseEntity.ok(milestoneLogService.getMilestoneLogsByUsernamePaginated(username, pageable)); } @PostMapping("/id") diff --git a/src/main/java/idatt2106/systemutvikling/sparesti/repository/MilestoneLogRepository.java b/src/main/java/idatt2106/systemutvikling/sparesti/repository/MilestoneLogRepository.java index 00ec9fd8ad29527504d794b9cf24d69e59e7e32b..cc97f976c2298df08923fae05836c5c931ccd6f3 100644 --- a/src/main/java/idatt2106/systemutvikling/sparesti/repository/MilestoneLogRepository.java +++ b/src/main/java/idatt2106/systemutvikling/sparesti/repository/MilestoneLogRepository.java @@ -1,6 +1,8 @@ package idatt2106.systemutvikling.sparesti.repository; import idatt2106.systemutvikling.sparesti.dao.MilestoneLogDAO; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -33,15 +35,16 @@ public interface MilestoneLogRepository extends JpaRepository<MilestoneLogDAO, L * @param username the username of the user * @return a list of milestone logs that belong to the user with the given username */ - List<MilestoneLogDAO> findMilestoneLogDAOByUserDAO_Username(String username); + Page<MilestoneLogDAO> findMilestoneLogDAOByUserDAO_Username(String username, Pageable pageable); + List<MilestoneLogDAO> findMilestoneLogDAOByUserDAO_Username(String username); /** * Method to find all milestone logs that have a completion date after the given completion date * * @param completionDate the completion date * @return a list of milestone logs that have a completion date after the given date */ - List<MilestoneLogDAO> findMilestoneLogDAOSByCompletionDate(LocalDateTime completionDate); + Page<MilestoneLogDAO> findMilestoneLogDAOSByCompletionDate(LocalDateTime completionDate, Pageable pageable); /** * Method to find all milestone logs that have a completion date before the given completion date diff --git a/src/main/java/idatt2106/systemutvikling/sparesti/repository/MilestoneRepository.java b/src/main/java/idatt2106/systemutvikling/sparesti/repository/MilestoneRepository.java index 62b217b4c70b8f275f95b288750eb0ef952094db..67206698e1bf8012eff7552f3c950d656ffd92dd 100644 --- a/src/main/java/idatt2106/systemutvikling/sparesti/repository/MilestoneRepository.java +++ b/src/main/java/idatt2106/systemutvikling/sparesti/repository/MilestoneRepository.java @@ -3,6 +3,8 @@ package idatt2106.systemutvikling.sparesti.repository; import idatt2106.systemutvikling.sparesti.dao.ChallengeLogDAO; import idatt2106.systemutvikling.sparesti.dao.MilestoneDAO; import idatt2106.systemutvikling.sparesti.dao.UserDAO; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -35,8 +37,11 @@ public interface MilestoneRepository extends JpaRepository<MilestoneDAO, Long> { * @param username the username of the user * @return a list of milestones that belong to the user with the given username */ + Page<MilestoneDAO> findMilestoneDAOByUserDAO_Username(String username, Pageable pageable); + List<MilestoneDAO> findMilestoneDAOByUserDAO_Username(String username); + /** * Method to find all milestones that have a start date after the given start date and a deadline date before the given deadline date * diff --git a/src/main/java/idatt2106/systemutvikling/sparesti/service/MilestoneLogService.java b/src/main/java/idatt2106/systemutvikling/sparesti/service/MilestoneLogService.java index fd8a9cc9dc9b32228bcf40edcd121b8fc41d817b..9c2011dc6fa3025ddabacf62d024d4e14afebe23 100644 --- a/src/main/java/idatt2106/systemutvikling/sparesti/service/MilestoneLogService.java +++ b/src/main/java/idatt2106/systemutvikling/sparesti/service/MilestoneLogService.java @@ -5,13 +5,11 @@ import idatt2106.systemutvikling.sparesti.repository.MilestoneLogRepository; import idatt2106.systemutvikling.sparesti.repository.MilestoneRepository; import idatt2106.systemutvikling.sparesti.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import idatt2106.systemutvikling.sparesti.service.JWTService; import idatt2106.systemutvikling.sparesti.dao.MilestoneLogDAO; -import idatt2106.systemutvikling.sparesti.dao.UserDAO; -import idatt2106.systemutvikling.sparesti.dao.MilestoneDAO; -import idatt2106.systemutvikling.sparesti.repository.MilestoneRepository; -import idatt2106.systemutvikling.sparesti.repository.MilestoneLogRepository; import idatt2106.systemutvikling.sparesti.mapper.MilestoneMapper; import java.util.ArrayList; @@ -49,6 +47,29 @@ public class MilestoneLogService { } + /** + * Method to get all milestones for a user. + * + * @param username The username of the user to get milestones for. + * @return List of MilestoneLogDAOs. + */ + public Page<MilestoneDTO> getMilestoneLogsByUsernamePaginated(String username, Pageable pageable) { + try { + Page<MilestoneLogDAO> milestoneLogDAOs = + milestoneLogRepository.findMilestoneLogDAOByUserDAO_Username(username, pageable); + + List<MilestoneDTO> milestoneDTOS = new ArrayList<>(); + for (MilestoneLogDAO milestoneDAO : milestoneLogDAOs) { + milestoneDTOS.add(MilestoneMapper.DAOLogToDTO(milestoneDAO)); + } + + return new PageImpl<>(milestoneDTOS, pageable, milestoneLogDAOs.getTotalElements()); + } catch (Exception e) { + logger.severe("Error when getting milestones: " + e.getMessage()); + return null; + } + } + /** * Method to get all milestones for a user. * @@ -57,11 +78,14 @@ public class MilestoneLogService { */ public List<MilestoneDTO> getMilestoneLogsByUsername(String username) { try { - List<MilestoneLogDAO> milestoneLogDAOs = milestoneLogRepository.findMilestoneLogDAOByUserDAO_Username(username); + List<MilestoneLogDAO> milestoneLogDAOs = + milestoneLogRepository.findMilestoneLogDAOByUserDAO_Username(username); + List<MilestoneDTO> milestoneDTOS = new ArrayList<>(); for (MilestoneLogDAO milestoneDAO : milestoneLogDAOs) { milestoneDTOS.add(MilestoneMapper.DAOLogToDTO(milestoneDAO)); } + return milestoneDTOS; } catch (Exception e) { logger.severe("Error when getting milestones: " + e.getMessage()); diff --git a/src/main/java/idatt2106/systemutvikling/sparesti/service/MilestoneService.java b/src/main/java/idatt2106/systemutvikling/sparesti/service/MilestoneService.java index 18f49d7a4ec57444ae8565a6eee88f0c84d69636..aee09bc3ca6f044fee7ad057aca7a9fbc78795eb 100644 --- a/src/main/java/idatt2106/systemutvikling/sparesti/service/MilestoneService.java +++ b/src/main/java/idatt2106/systemutvikling/sparesti/service/MilestoneService.java @@ -7,6 +7,9 @@ import idatt2106.systemutvikling.sparesti.dto.MilestoneDTO; import idatt2106.systemutvikling.sparesti.mapper.MilestoneMapper; import idatt2106.systemutvikling.sparesti.service.JWTService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; @@ -44,6 +47,27 @@ public class MilestoneService { this.milestoneLogService = milestoneLogService; } + /** + * Method to get all active milestones for a user. + * + * @param username The username of the user to get milestones for. + * @return List of MilestoneDTOs. + */ + public Page<MilestoneDTO> getActiveMilestonesDTOsByUsernamePaginated(String username, Pageable pageable) { + try { + Page<MilestoneDAO> milestoneDAOs = milestoneRepository.findMilestoneDAOByUserDAO_Username(username, pageable); + + List<MilestoneDTO> milestoneDTOS = new ArrayList<>(); + for (MilestoneDAO milestoneDAO : milestoneDAOs) { + milestoneDTOS.add(MilestoneMapper.toDTO(milestoneDAO)); + } + return new PageImpl<>(milestoneDTOS, pageable, milestoneDAOs.getTotalElements()); + } catch (Exception e) { + logger.severe("Error when getting milestones: " + e.getMessage()); + return null; + } + } + /** * Method to get all active milestones for a user. * @@ -53,6 +77,7 @@ public class MilestoneService { public List<MilestoneDTO> getActiveMilestonesDTOsByUsername(String username) { try { List<MilestoneDAO> milestoneDAOs = milestoneRepository.findMilestoneDAOByUserDAO_Username(username); + List<MilestoneDTO> milestoneDTOS = new ArrayList<>(); for (MilestoneDAO milestoneDAO : milestoneDAOs) { milestoneDTOS.add(MilestoneMapper.toDTO(milestoneDAO));