Доделана пагинация в пакетах

This commit is contained in:
serega6531
2019-05-01 18:19:36 +03:00
parent 8ebe6921ac
commit bb517516e1
5 changed files with 40 additions and 2 deletions

View File

@@ -26,7 +26,7 @@ public class PacketController {
} }
@PostMapping("/{streamId}") @PostMapping("/{streamId}")
public List<Packet> getPacketsForStream(@PathVariable int streamId, @RequestBody Pagination pagination) { public List<Packet> getPacketsForStream(@PathVariable long streamId, @RequestBody Pagination pagination) {
final Optional<Stream> stream = streamService.find(streamId); final Optional<Stream> stream = streamService.find(streamId);
if(stream.isPresent()) { if(stream.isPresent()) {
return packetService.getPacketsForStream(pagination, stream.get()); return packetService.getPacketsForStream(pagination, stream.get());

View File

@@ -1,4 +1,17 @@
package ru.serega6531.packmate.model; package ru.serega6531.packmate.model;
import lombok.Data;
import org.springframework.data.domain.Sort;
@Data
public class Pagination { public class Pagination {
private boolean fetchLatest;
private Sort.Direction direction;
private long startingFrom;
private int pageSize;
} }

View File

@@ -1,5 +1,6 @@
package ru.serega6531.packmate.model; package ru.serega6531.packmate.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.GenericGenerator;
@@ -30,6 +31,7 @@ public class Pattern {
private String color; // для вставки в css private String color; // для вставки в css
@ManyToMany(mappedBy = "foundPatterns", cascade = CascadeType.ALL) @ManyToMany(mappedBy = "foundPatterns", cascade = CascadeType.ALL)
@JsonIgnore
private List<Stream> matchedStreams; private List<Stream> matchedStreams;
} }

View File

@@ -1,7 +1,18 @@
package ru.serega6531.packmate.repository; package ru.serega6531.packmate.repository;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import ru.serega6531.packmate.model.Packet; import ru.serega6531.packmate.model.Packet;
import ru.serega6531.packmate.model.Stream;
import java.util.List;
public interface PacketRepository extends JpaRepository<Packet, Long> { public interface PacketRepository extends JpaRepository<Packet, Long> {
List<Packet> findAllByStream(Stream stream, Pageable pageable);
List<Packet> findAllByStreamAndIdGreaterThan(Stream stream, long packetId, Pageable pageable);
List<Packet> findAllByStreamAndIdLessThan(Stream stream, long packetId, Pageable pageable);
} }

View File

@@ -1,6 +1,8 @@
package ru.serega6531.packmate.service; package ru.serega6531.packmate.service;
import org.springframework.beans.factory.annotation.Autowired; 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 org.springframework.stereotype.Service;
import ru.serega6531.packmate.model.Packet; import ru.serega6531.packmate.model.Packet;
import ru.serega6531.packmate.model.Pagination; import ru.serega6531.packmate.model.Pagination;
@@ -20,7 +22,17 @@ public class PacketService {
} }
public List<Packet> getPacketsForStream(Pagination pagination, Stream stream) { public List<Packet> 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) { public Packet save(Packet packet) {