From c01e29d6d2a9bfefaa5085e4bbecf3b34f0d2605 Mon Sep 17 00:00:00 2001 From: Marcin Alchimowicz Date: Wed, 17 Jan 2024 23:11:39 +0100 Subject: [PATCH] feat: added paginated request --- .../controller/MainController.java | 17 ++++------ .../prapro2spring/dto/AllPeopleValues.java | 24 ++++++++++++++ .../repository/PersonValueRepository.java | 4 +-- .../service/PersonValueService.java | 32 +++++++++++++++++++ 4 files changed, 65 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/example/prapro2spring/dto/AllPeopleValues.java create mode 100644 src/main/java/com/example/prapro2spring/service/PersonValueService.java diff --git a/src/main/java/com/example/prapro2spring/controller/MainController.java b/src/main/java/com/example/prapro2spring/controller/MainController.java index d703473..601bb3b 100644 --- a/src/main/java/com/example/prapro2spring/controller/MainController.java +++ b/src/main/java/com/example/prapro2spring/controller/MainController.java @@ -1,14 +1,11 @@ package com.example.prapro2spring.controller; -import com.example.prapro2spring.model.Person; -import com.example.prapro2spring.dto.PersonValue; +import com.example.prapro2spring.dto.AllPeopleValues; import com.example.prapro2spring.repository.PeopleRepository; +import com.example.prapro2spring.service.PersonValueService; import org.springframework.beans.factory.annotation.Autowired; -import com.example.prapro2spring.repository.PersonValueRepository; import org.springframework.web.bind.annotation.*; -import java.util.List; - @RestController @RequestMapping("/api/main") public class MainController { @@ -16,16 +13,16 @@ public class MainController { @Autowired private PeopleRepository peopleRepository; @Autowired - private PersonValueRepository personValueRepository; + private PersonValueService PersonValueService; - @GetMapping - public List getAllPeopleValues() { - return personValueRepository.queryAllPersonValues(); + @GetMapping("/") + public AllPeopleValues getAllPeopleValues(@RequestParam(value = "startIndex", defaultValue = "0") Integer startIndex) { + return PersonValueService.getAllPersonValues(startIndex); } @GetMapping("/{id}") public Integer getPersonValuesById(@PathVariable Integer id){ - return personValueRepository.queryPersonValuesById(id); + return PersonValueService.getPersonValuesById(id); } } \ No newline at end of file diff --git a/src/main/java/com/example/prapro2spring/dto/AllPeopleValues.java b/src/main/java/com/example/prapro2spring/dto/AllPeopleValues.java new file mode 100644 index 0000000..ae2072e --- /dev/null +++ b/src/main/java/com/example/prapro2spring/dto/AllPeopleValues.java @@ -0,0 +1,24 @@ +package com.example.prapro2spring.dto; + +import java.util.List; + +public class AllPeopleValues { + private List peopleValues; + private Integer lastIndex; + + public AllPeopleValues(List peopleValues, Integer lastIndex) { + this.peopleValues = peopleValues; + this.lastIndex = lastIndex; + } + + public AllPeopleValues() { + } + + public List getPeopleValues() { + return peopleValues; + } + + public Integer getLastIndex() { + return lastIndex; + } +} diff --git a/src/main/java/com/example/prapro2spring/repository/PersonValueRepository.java b/src/main/java/com/example/prapro2spring/repository/PersonValueRepository.java index 4849bda..f05f8a9 100644 --- a/src/main/java/com/example/prapro2spring/repository/PersonValueRepository.java +++ b/src/main/java/com/example/prapro2spring/repository/PersonValueRepository.java @@ -11,6 +11,6 @@ public interface PersonValueRepository extends CrudRepository queryAllPersonValues(); + @Query(value = "SELECT * FROM people_scoreboard.get_all_people_values(?1, 3)", nativeQuery = true) + List queryAllPersonValues(Integer startIndex); } diff --git a/src/main/java/com/example/prapro2spring/service/PersonValueService.java b/src/main/java/com/example/prapro2spring/service/PersonValueService.java new file mode 100644 index 0000000..6eed870 --- /dev/null +++ b/src/main/java/com/example/prapro2spring/service/PersonValueService.java @@ -0,0 +1,32 @@ +package com.example.prapro2spring.service; + +import com.example.prapro2spring.dto.AllPeopleValues; +import com.example.prapro2spring.dto.PersonValue; +import com.example.prapro2spring.repository.PersonValueRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class PersonValueService { + @Autowired + PersonValueRepository personValueRepository; + + public AllPeopleValues getAllPersonValues(Integer lastIndex) { + List results = personValueRepository.queryAllPersonValues(lastIndex); + List personValues = new ArrayList<>(); + + for (Object[] result : results) { + PersonValue personValue = new PersonValue((Integer) result[0], (Integer) result[1]); + personValues.add(personValue); + } + + return new AllPeopleValues(personValues, personValues.size()); +} + + public Integer getPersonValuesById(Integer id) { + return personValueRepository.queryPersonValuesById(id); + } +}