From bb517516e18099ad6143ce83d0756daa8aea0a9d Mon Sep 17 00:00:00 2001 From: serega6531 Date: Wed, 1 May 2019 18:19:36 +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=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packmate/controller/PacketController.java | 2 +- .../ru/serega6531/packmate/model/Pagination.java | 13 +++++++++++++ .../java/ru/serega6531/packmate/model/Pattern.java | 2 ++ .../packmate/repository/PacketRepository.java | 11 +++++++++++ .../serega6531/packmate/service/PacketService.java | 14 +++++++++++++- 5 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/serega6531/packmate/controller/PacketController.java b/src/main/java/ru/serega6531/packmate/controller/PacketController.java index 207e785..92ff6df 100644 --- a/src/main/java/ru/serega6531/packmate/controller/PacketController.java +++ b/src/main/java/ru/serega6531/packmate/controller/PacketController.java @@ -26,7 +26,7 @@ public class PacketController { } @PostMapping("/{streamId}") - public List getPacketsForStream(@PathVariable int streamId, @RequestBody Pagination pagination) { + public List getPacketsForStream(@PathVariable long streamId, @RequestBody Pagination pagination) { final Optional stream = streamService.find(streamId); if(stream.isPresent()) { return packetService.getPacketsForStream(pagination, stream.get()); diff --git a/src/main/java/ru/serega6531/packmate/model/Pagination.java b/src/main/java/ru/serega6531/packmate/model/Pagination.java index 393eead..6eedffb 100644 --- a/src/main/java/ru/serega6531/packmate/model/Pagination.java +++ b/src/main/java/ru/serega6531/packmate/model/Pagination.java @@ -1,4 +1,17 @@ package ru.serega6531.packmate.model; +import lombok.Data; +import org.springframework.data.domain.Sort; + +@Data public class Pagination { + + private boolean fetchLatest; + + private Sort.Direction direction; + + private long startingFrom; + + private int pageSize; + } diff --git a/src/main/java/ru/serega6531/packmate/model/Pattern.java b/src/main/java/ru/serega6531/packmate/model/Pattern.java index 11d01b7..dfdec7d 100644 --- a/src/main/java/ru/serega6531/packmate/model/Pattern.java +++ b/src/main/java/ru/serega6531/packmate/model/Pattern.java @@ -1,5 +1,6 @@ package ru.serega6531.packmate.model; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import org.hibernate.annotations.GenericGenerator; @@ -30,6 +31,7 @@ public class Pattern { private String color; // для вставки в css @ManyToMany(mappedBy = "foundPatterns", cascade = CascadeType.ALL) + @JsonIgnore private List matchedStreams; } diff --git a/src/main/java/ru/serega6531/packmate/repository/PacketRepository.java b/src/main/java/ru/serega6531/packmate/repository/PacketRepository.java index bdd361c..63c3431 100644 --- a/src/main/java/ru/serega6531/packmate/repository/PacketRepository.java +++ b/src/main/java/ru/serega6531/packmate/repository/PacketRepository.java @@ -1,7 +1,18 @@ package ru.serega6531.packmate.repository; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import ru.serega6531.packmate.model.Packet; +import ru.serega6531.packmate.model.Stream; + +import java.util.List; public interface PacketRepository extends JpaRepository { + + List findAllByStream(Stream stream, Pageable pageable); + + List findAllByStreamAndIdGreaterThan(Stream stream, long packetId, Pageable pageable); + + List findAllByStreamAndIdLessThan(Stream stream, long packetId, Pageable pageable); + } diff --git a/src/main/java/ru/serega6531/packmate/service/PacketService.java b/src/main/java/ru/serega6531/packmate/service/PacketService.java index c627c4c..f201af6 100644 --- a/src/main/java/ru/serega6531/packmate/service/PacketService.java +++ b/src/main/java/ru/serega6531/packmate/service/PacketService.java @@ -1,6 +1,8 @@ package ru.serega6531.packmate.service; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import ru.serega6531.packmate.model.Packet; import ru.serega6531.packmate.model.Pagination; @@ -20,7 +22,17 @@ public class PacketService { } public List getPacketsForStream(Pagination pagination, Stream stream) { - return repository.findAll(); + PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id"); + + if(pagination.isFetchLatest()) { // последние пакеты + return repository.findAllByStream(stream, page); + } else { + if (pagination.getDirection() == Sort.Direction.ASC) { // более новые пакеты + return repository.findAllByStreamAndIdGreaterThan(stream, pagination.getStartingFrom(), page); + } else { // более старые пакеты + return repository.findAllByStreamAndIdLessThan(stream, pagination.getStartingFrom(), page); + } + } } public Packet save(Packet packet) {