Skip to content
Snippets Groups Projects
Commit 16515307 authored by Vilde Min Vikan's avatar Vilde Min Vikan
Browse files

Merge branch 'history-filtration' into 'main'

Implemented paging and filtration for results.

See merge request !5
parents 324c1051 46233262
No related branches found
No related tags found
1 merge request!5Implemented paging and filtration for results.
...@@ -6,6 +6,8 @@ import ntnu.idatt2105.group44.trivioServer.model.Result; ...@@ -6,6 +6,8 @@ import ntnu.idatt2105.group44.trivioServer.model.Result;
import ntnu.idatt2105.group44.trivioServer.repository.ResultRepository; import ntnu.idatt2105.group44.trivioServer.repository.ResultRepository;
import ntnu.idatt2105.group44.trivioServer.service.JWTService; import ntnu.idatt2105.group44.trivioServer.service.JWTService;
import ntnu.idatt2105.group44.trivioServer.service.ResultService; 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.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
...@@ -28,20 +30,33 @@ public class ResultController { ...@@ -28,20 +30,33 @@ public class ResultController {
} }
@GetMapping() @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 { try {
long userId = Long.parseLong(jwtService.extractSubjectFromHeader(token)); 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); return ResponseEntity.ok(results);
} catch (RuntimeException e) { } catch (RuntimeException e) {
return ResponseEntity.badRequest().build(); return ResponseEntity.badRequest().build();
} }
} }
// @GetMapping()
// public List<Result> getResults(){ @GetMapping("/trivioTitles")
// return resultService.getAllResults(); public ResponseEntity<List<String>> getDistinctTrivioTitles(@RequestHeader("Authorization") String token) {
// } long userId = Long.parseLong(jwtService.extractSubjectFromHeader(token));
@PostMapping List<String> trivioTitles = resultService.getDistinctTrivioTitles(userId);
return ResponseEntity.ok(trivioTitles);
}
@PostMapping()
public ResponseEntity<String> postResult(@RequestBody ResultDTO resultDTO){ public ResponseEntity<String> postResult(@RequestBody ResultDTO resultDTO){
resultService.addResult(resultDTO); resultService.addResult(resultDTO);
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
......
...@@ -3,6 +3,8 @@ package ntnu.idatt2105.group44.trivioServer.repository; ...@@ -3,6 +3,8 @@ package ntnu.idatt2105.group44.trivioServer.repository;
import java.util.Optional; import java.util.Optional;
import ntnu.idatt2105.group44.trivioServer.model.Result; import ntnu.idatt2105.group44.trivioServer.model.Result;
import ntnu.idatt2105.group44.trivioServer.model.Trivio; 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.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -12,6 +14,10 @@ import java.util.List; ...@@ -12,6 +14,10 @@ import java.util.List;
@Repository @Repository
public interface ResultRepository extends JpaRepository<Result, Long> { public interface ResultRepository extends JpaRepository<Result, Long> {
// @Query("SELECT e From Result e WHERE e.user.id=?1") Page<Result> getResultsByUserId(Long userId, Pageable pageable);
List<Result> getResultsByUserId(Long userId);
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);
} }
...@@ -7,6 +7,8 @@ import ntnu.idatt2105.group44.trivioServer.model.Result; ...@@ -7,6 +7,8 @@ import ntnu.idatt2105.group44.trivioServer.model.Result;
import ntnu.idatt2105.group44.trivioServer.model.Trivio; import ntnu.idatt2105.group44.trivioServer.model.Trivio;
import ntnu.idatt2105.group44.trivioServer.model.User; import ntnu.idatt2105.group44.trivioServer.model.User;
import ntnu.idatt2105.group44.trivioServer.repository.ResultRepository; import ntnu.idatt2105.group44.trivioServer.repository.ResultRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
...@@ -22,8 +24,6 @@ public class ResultService { ...@@ -22,8 +24,6 @@ public class ResultService {
this.trivioService = trivioService; 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){ public void addResult(ResultDTO resultDTO){
// per nå, ingen unntakshåndtering legg til det senere. // per nå, ingen unntakshåndtering legg til det senere.
Result result = convertToEntity(resultDTO); Result result = convertToEntity(resultDTO);
...@@ -38,10 +38,17 @@ public class ResultService { ...@@ -38,10 +38,17 @@ public class ResultService {
} }
return null; 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){ public ResultDTO convertToDTO(Result result){
Long trivioId = result.getTrivio().getId(); Long trivioId = result.getTrivio().getId();
String username = result.getUser().getUsername(); String username = result.getUser().getUsername();
...@@ -60,6 +67,10 @@ public class ResultService { ...@@ -60,6 +67,10 @@ public class ResultService {
return result; return result;
} }
public List<String> getDistinctTrivioTitles(Long userId) {
return resultRepository.findDistinctTrivioTitlesByUserId(userId);
}
public List<Result> getAllResults(){ public List<Result> getAllResults(){
return resultRepository.findAll(); return resultRepository.findAll();
} }
......
...@@ -37,19 +37,19 @@ public class TrivioSpecifications { ...@@ -37,19 +37,19 @@ public class TrivioSpecifications {
//Method to filter trivios by visibility //Method to filter trivios by visibility
public static Specification<Trivio> filterByVisibility(String visibility){ public static Specification<Trivio> filterByVisibility(String visibility){
return (root, query, criteriaBuilder) -> 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 // Method to filter trivios by category
public static Specification<Trivio> filterByCategory(String category) { public static Specification<Trivio> filterByCategory(String category) {
return (root, query, criteriaBuilder) -> 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 // Method to filter trivios by difficulty
public static Specification<Trivio> filterByDifficulty(String difficulty) { public static Specification<Trivio> filterByDifficulty(String difficulty) {
return (root, query, criteriaBuilder) -> 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 // Method to filter trivios by tags
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment