diff --git a/src/main/java/ntnu/idatt2105/group44/trivioServer/controller/ResultController.java b/src/main/java/ntnu/idatt2105/group44/trivioServer/controller/ResultController.java index 65b4e03831b37f0ce23cfd6601102663dc6a1b2e..d7644b35060dab45d98eef8685096b7d74175763 100644 --- a/src/main/java/ntnu/idatt2105/group44/trivioServer/controller/ResultController.java +++ b/src/main/java/ntnu/idatt2105/group44/trivioServer/controller/ResultController.java @@ -6,6 +6,8 @@ import ntnu.idatt2105.group44.trivioServer.model.Result; import ntnu.idatt2105.group44.trivioServer.repository.ResultRepository; import ntnu.idatt2105.group44.trivioServer.service.JWTService; import ntnu.idatt2105.group44.trivioServer.service.ResultService; +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.GetMapping; @@ -28,20 +30,33 @@ public class ResultController { } @GetMapping() - public ResponseEntity<List<Result>> getResultByUserId(@RequestHeader("Authorization") String token){ + public ResponseEntity<Page<Result>> getResultByUserIdAndTitle( + @RequestHeader("Authorization") String token, + @RequestParam(required = false) String title, + Pageable pageable) { try { long userId = Long.parseLong(jwtService.extractSubjectFromHeader(token)); - List<Result> results = resultService.getResultbyUserId(userId); + Page<Result> results; + + if (title != null) { + results = resultService.getResultByUserIdAndTitle(userId, title, pageable); + } else { + results= resultService.getResultByUserId(userId, pageable); + } return ResponseEntity.ok(results); - } catch(RuntimeException e) { + } catch (RuntimeException e) { return ResponseEntity.badRequest().build(); } } -// @GetMapping() -// public List<Result> getResults(){ -// return resultService.getAllResults(); -// } - @PostMapping + + @GetMapping("/trivioTitles") + public ResponseEntity<List<String>> getDistinctTrivioTitles(@RequestHeader("Authorization") String token) { + long userId = Long.parseLong(jwtService.extractSubjectFromHeader(token)); + List<String> trivioTitles = resultService.getDistinctTrivioTitles(userId); + return ResponseEntity.ok(trivioTitles); + } + + @PostMapping() public ResponseEntity<String> postResult(@RequestBody ResultDTO resultDTO){ resultService.addResult(resultDTO); return new ResponseEntity<>(HttpStatus.OK); diff --git a/src/main/java/ntnu/idatt2105/group44/trivioServer/repository/ResultRepository.java b/src/main/java/ntnu/idatt2105/group44/trivioServer/repository/ResultRepository.java index 86c65993ce7d5e8894e0ef4be5abb6b271dbc8de..8a33f8e8574947775c78f0e68ede5e1560d30eba 100644 --- a/src/main/java/ntnu/idatt2105/group44/trivioServer/repository/ResultRepository.java +++ b/src/main/java/ntnu/idatt2105/group44/trivioServer/repository/ResultRepository.java @@ -3,6 +3,8 @@ package ntnu.idatt2105.group44.trivioServer.repository; import java.util.Optional; import ntnu.idatt2105.group44.trivioServer.model.Result; import ntnu.idatt2105.group44.trivioServer.model.Trivio; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @@ -12,6 +14,10 @@ import java.util.List; @Repository public interface ResultRepository extends JpaRepository<Result, Long> { -// @Query("SELECT e From Result e WHERE e.user.id=?1") - List<Result> getResultsByUserId(Long userId); + Page<Result> getResultsByUserId(Long userId, Pageable pageable); + + Page<Result> getResultsByUserIdAndTrivio_Title(Long userId, String title, Pageable pageable); + + @Query("SELECT DISTINCT t.title FROM Result r " + "JOIN r.trivio t") + List<String> findDistinctTrivioTitlesByUserId(Long userId); } diff --git a/src/main/java/ntnu/idatt2105/group44/trivioServer/service/ResultService.java b/src/main/java/ntnu/idatt2105/group44/trivioServer/service/ResultService.java index a05e24e9c1546a4c29fc11c723bc33821c92539b..e93bec5ff8c3a458fdd29305d447fb1e09d734b4 100644 --- a/src/main/java/ntnu/idatt2105/group44/trivioServer/service/ResultService.java +++ b/src/main/java/ntnu/idatt2105/group44/trivioServer/service/ResultService.java @@ -7,6 +7,8 @@ import ntnu.idatt2105.group44.trivioServer.model.Result; import ntnu.idatt2105.group44.trivioServer.model.Trivio; import ntnu.idatt2105.group44.trivioServer.model.User; import ntnu.idatt2105.group44.trivioServer.repository.ResultRepository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @Service @@ -22,8 +24,6 @@ public class ResultService { this.trivioService = trivioService; } - // Skal vi gjøre at når spiller fullfører et spill, så vil scoren bli postet? - public void addResult(ResultDTO resultDTO){ // per nå, ingen unntakshåndtering legg til det senere. Result result = convertToEntity(resultDTO); @@ -38,10 +38,17 @@ public class ResultService { } return null; } - public List<Result> getResultbyUserId(Long id){ - return resultRepository.getResultsByUserId(id); + + public Page<Result> getResultByUserId(Long id, Pageable pageable){ + return resultRepository.getResultsByUserId(id, pageable); + } + + public Page<Result> getResultByUserIdAndTitle(Long id, String title,Pageable pageable){ + return resultRepository.getResultsByUserIdAndTrivio_Title(id, title,pageable); } + + public ResultDTO convertToDTO(Result result){ Long trivioId = result.getTrivio().getId(); String username = result.getUser().getUsername(); @@ -60,6 +67,10 @@ public class ResultService { return result; } + public List<String> getDistinctTrivioTitles(Long userId) { + return resultRepository.findDistinctTrivioTitlesByUserId(userId); + } + public List<Result> getAllResults(){ return resultRepository.findAll(); } diff --git a/src/main/java/ntnu/idatt2105/group44/trivioServer/service/TrivioSpecifications.java b/src/main/java/ntnu/idatt2105/group44/trivioServer/service/TrivioSpecifications.java index 4a14ce6e76b065d9ce3e0990e7d88d3170f45e88..3f9644981cca9ab43204965f933db7fa5ef6c16a 100644 --- a/src/main/java/ntnu/idatt2105/group44/trivioServer/service/TrivioSpecifications.java +++ b/src/main/java/ntnu/idatt2105/group44/trivioServer/service/TrivioSpecifications.java @@ -37,19 +37,19 @@ public class TrivioSpecifications { //Method to filter trivios by visibility public static Specification<Trivio> filterByVisibility(String visibility){ return (root, query, criteriaBuilder) -> - criteriaBuilder.equal(root.get("visibility"), visibility); + criteriaBuilder.equal(criteriaBuilder.lower(root.get("visibility")), visibility.toLowerCase()); } // Method to filter trivios by category public static Specification<Trivio> filterByCategory(String category) { return (root, query, criteriaBuilder) -> - criteriaBuilder.equal(root.get("category"), category); + criteriaBuilder.equal(criteriaBuilder.lower(root.get("category")), category.toLowerCase()); } // Method to filter trivios by difficulty public static Specification<Trivio> filterByDifficulty(String difficulty) { return (root, query, criteriaBuilder) -> - criteriaBuilder.equal(root.get("difficulty"), difficulty); + criteriaBuilder.equal(criteriaBuilder.lower(root.get("difficulty")), difficulty.toLowerCase()); } // Method to filter trivios by tags