From b4a9903d1b26906f8987cf246a7fbbb6615055c8 Mon Sep 17 00:00:00 2001 From: serega6531 Date: Wed, 1 May 2019 19:53:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=B0=D0=B3=D0=B8=D0=BD=D0=B0=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B2=20=D1=81=D1=82=D1=80=D0=B8=D0=BC=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packmate/controller/StreamController.java | 35 ++++++++++++------- .../packmate/repository/StreamRepository.java | 12 ++++++- .../packmate/service/StreamService.java | 30 +++++++++++++--- 3 files changed, 59 insertions(+), 18 deletions(-) diff --git a/src/main/java/ru/serega6531/packmate/controller/StreamController.java b/src/main/java/ru/serega6531/packmate/controller/StreamController.java index 5aa92cf..48752c2 100644 --- a/src/main/java/ru/serega6531/packmate/controller/StreamController.java +++ b/src/main/java/ru/serega6531/packmate/controller/StreamController.java @@ -1,34 +1,43 @@ package ru.serega6531.packmate.controller; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import ru.serega6531.packmate.model.CtfService; +import ru.serega6531.packmate.model.Pagination; import ru.serega6531.packmate.model.Stream; +import ru.serega6531.packmate.service.ServicesService; import ru.serega6531.packmate.service.StreamService; +import java.util.Collections; import java.util.List; +import java.util.Optional; @RestController @RequestMapping("/api/stream/") public class StreamController { - private final StreamService service; + private final StreamService streamService; + private final ServicesService servicesService; @Autowired - public StreamController(StreamService service) { - this.service = service; + public StreamController(StreamService streamService, ServicesService servicesService) { + this.streamService = streamService; + this.servicesService = servicesService; } - @GetMapping("/all") - public List getStreams() { - return service.findAll(); + @PostMapping("/all") + public List getStreams(@RequestBody Pagination pagination) { + return streamService.findAll(pagination); } - @GetMapping("/{port}") - public List getStreams(@PathVariable int port) { - return service.findAllByServicePort(port); + @PostMapping("/{port}") + public List getStreams(@PathVariable int port, @RequestBody Pagination pagination) { + final Optional serviceOptional = servicesService.findByPort(port); + if(serviceOptional.isPresent()) { + return streamService.findAllByService(pagination, serviceOptional.get()); + } else { + return Collections.emptyList(); + } } } diff --git a/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java b/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java index c85f528..21d0758 100644 --- a/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java +++ b/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java @@ -1,12 +1,22 @@ package ru.serega6531.packmate.repository; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import ru.serega6531.packmate.model.CtfService; import ru.serega6531.packmate.model.Stream; import java.util.List; public interface StreamRepository extends JpaRepository { - List findAllByService_Port(int port); + List findAllByIdGreaterThan(long streamId, Pageable pageable); + + List findAllByIdLessThan(long streamId, Pageable pageable); + + List findAllByService(CtfService service, Pageable pageable); + + List findAllByServiceAndIdGreaterThan(CtfService service, long streamId, Pageable pageable); + + List findAllByServiceAndIdLessThan(CtfService service, long streamId, Pageable pageable); } diff --git a/src/main/java/ru/serega6531/packmate/service/StreamService.java b/src/main/java/ru/serega6531/packmate/service/StreamService.java index eb5d57f..2ce84af 100644 --- a/src/main/java/ru/serega6531/packmate/service/StreamService.java +++ b/src/main/java/ru/serega6531/packmate/service/StreamService.java @@ -3,6 +3,8 @@ package ru.serega6531.packmate.service; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ru.serega6531.packmate.model.*; @@ -93,12 +95,32 @@ public class StreamService { return repository.findById(id); } - public List findAll() { - return repository.findAll(); + public List findAll(Pagination pagination) { + PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id"); + + if(pagination.isFetchLatest()) { // последние стримы + return repository.findAll(page).getContent(); + } else { + if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы + return repository.findAllByIdGreaterThan(pagination.getStartingFrom(), page); + } else { // более старые стримы + return repository.findAllByIdLessThan(pagination.getStartingFrom(), page); + } + } } - public List findAllByServicePort(int port) { - return repository.findAllByService_Port(port); + public List findAllByService(Pagination pagination, CtfService service) { + PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id"); + + if(pagination.isFetchLatest()) { // последние стримы + return repository.findAllByService(service, page); + } else { + if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы + return repository.findAllByServiceAndIdGreaterThan(service, pagination.getStartingFrom(), page); + } else { // более старые стримы + return repository.findAllByServiceAndIdLessThan(service, pagination.getStartingFrom(), page); + } + } } }