From d1a69db83010c39017d33eebbbc678b48aef778f Mon Sep 17 00:00:00 2001 From: serega6531 Date: Mon, 6 May 2019 22:26:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=B8=D0=BC=D1=8B=20=D0=B8=D0=B7=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D1=8B=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packmate/controller/StreamController.java | 10 +++++++ .../serega6531/packmate/model/Pagination.java | 2 ++ .../ru/serega6531/packmate/model/Stream.java | 2 ++ .../packmate/repository/StreamRepository.java | 12 +++++---- .../packmate/service/StreamService.java | 26 +++++++++++++------ 5 files changed, 39 insertions(+), 13 deletions(-) diff --git a/src/main/java/ru/serega6531/packmate/controller/StreamController.java b/src/main/java/ru/serega6531/packmate/controller/StreamController.java index 48752c2..7880e48 100644 --- a/src/main/java/ru/serega6531/packmate/controller/StreamController.java +++ b/src/main/java/ru/serega6531/packmate/controller/StreamController.java @@ -40,4 +40,14 @@ public class StreamController { } } + @PostMapping("/{id}/favorite") + public void favoriteStream(@PathVariable long id) { + streamService.setFavorite(id, true); + } + + @PostMapping("/{id}/unfavorite") + public void unfavoriteStream(@PathVariable long id) { + streamService.setFavorite(id, false); + } + } diff --git a/src/main/java/ru/serega6531/packmate/model/Pagination.java b/src/main/java/ru/serega6531/packmate/model/Pagination.java index 6eedffb..2c71343 100644 --- a/src/main/java/ru/serega6531/packmate/model/Pagination.java +++ b/src/main/java/ru/serega6531/packmate/model/Pagination.java @@ -14,4 +14,6 @@ public class Pagination { private int pageSize; + private boolean favorites; // только для стримов, определяет, искать только избранные стримы или все + } diff --git a/src/main/java/ru/serega6531/packmate/model/Stream.java b/src/main/java/ru/serega6531/packmate/model/Stream.java index 7b4ee08..975b745 100644 --- a/src/main/java/ru/serega6531/packmate/model/Stream.java +++ b/src/main/java/ru/serega6531/packmate/model/Stream.java @@ -43,4 +43,6 @@ public class Stream { @ManyToMany(cascade = CascadeType.ALL) private List foundPatterns; + private boolean favorite; + } diff --git a/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java b/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java index 21d0758..728bf4d 100644 --- a/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java +++ b/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java @@ -9,14 +9,16 @@ import java.util.List; public interface StreamRepository extends JpaRepository { - List findAllByIdGreaterThan(long streamId, Pageable pageable); + List findAllByFavorite(Pageable pageable, boolean favorite); - List findAllByIdLessThan(long streamId, Pageable pageable); + List findAllByIdGreaterThanAndFavorite(long streamId, boolean favorite, Pageable pageable); - List findAllByService(CtfService service, Pageable pageable); + List findAllByIdLessThanAndFavorite(long streamId, boolean favorite, Pageable pageable); - List findAllByServiceAndIdGreaterThan(CtfService service, long streamId, Pageable pageable); + List findAllByServiceAndFavorite(CtfService service, boolean favorite, Pageable pageable); - List findAllByServiceAndIdLessThan(CtfService service, long streamId, Pageable pageable); + List findAllByServiceAndIdGreaterThanAndFavorite(CtfService service, long streamId, boolean favorite, Pageable pageable); + + List findAllByServiceAndIdLessThanAndFavorite(CtfService service, long streamId, boolean favorite, 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 061f2c9..aced456 100644 --- a/src/main/java/ru/serega6531/packmate/service/StreamService.java +++ b/src/main/java/ru/serega6531/packmate/service/StreamService.java @@ -53,7 +53,7 @@ public class StreamService { ); if (!serviceOptional.isPresent()) { - log.info("Не удалось сохранить стрим: сервиса на порту {} или {} не существует", + log.warn("Не удалось сохранить стрим: сервиса на порту {} или {} не существует", unfinishedStream.getFirstPort(), unfinishedStream.getSecondPort()); return; } @@ -68,7 +68,7 @@ public class StreamService { packets.removeIf(packet -> packet.getContent().length == 0); if(packets.isEmpty()) { - log.info("Стрим состоит только из пустых пакетов и не будет сохранен"); + log.debug("Стрим состоит только из пустых пакетов и не будет сохранен"); return; } } @@ -107,16 +107,26 @@ public class StreamService { return repository.findById(id); } + @Transactional + public void setFavorite(long id, boolean favorite) { + final Optional streamOptional = repository.findById(id); + if(streamOptional.isPresent()) { + final Stream stream = streamOptional.get(); + stream.setFavorite(favorite); + repository.save(stream); + } + } + public List findAll(Pagination pagination) { PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id"); if(pagination.isFetchLatest()) { // последние стримы - return repository.findAll(page).getContent(); + return repository.findAllByFavorite(page, pagination.isFavorites()); } else { if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы - return repository.findAllByIdGreaterThan(pagination.getStartingFrom(), page); + return repository.findAllByIdGreaterThanAndFavorite(pagination.getStartingFrom(), pagination.isFavorites(), page); } else { // более старые стримы - return repository.findAllByIdLessThan(pagination.getStartingFrom(), page); + return repository.findAllByIdLessThanAndFavorite(pagination.getStartingFrom(), pagination.isFavorites(), page); } } } @@ -125,12 +135,12 @@ public class StreamService { PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id"); if(pagination.isFetchLatest()) { // последние стримы - return repository.findAllByService(service, page); + return repository.findAllByServiceAndFavorite(service, pagination.isFavorites(), page); } else { if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы - return repository.findAllByServiceAndIdGreaterThan(service, pagination.getStartingFrom(), page); + return repository.findAllByServiceAndIdGreaterThanAndFavorite(service, pagination.getStartingFrom(), pagination.isFavorites(), page); } else { // более старые стримы - return repository.findAllByServiceAndIdLessThan(service, pagination.getStartingFrom(), page); + return repository.findAllByServiceAndIdLessThanAndFavorite(service, pagination.getStartingFrom(), pagination.isFavorites(), page); } } }