diff --git a/src/main/java/ru/serega6531/packmate/model/Pagination.java b/src/main/java/ru/serega6531/packmate/model/Pagination.java index fa7d38e..91e8384 100644 --- a/src/main/java/ru/serega6531/packmate/model/Pagination.java +++ b/src/main/java/ru/serega6531/packmate/model/Pagination.java @@ -6,8 +6,6 @@ import org.springframework.data.domain.Sort; @Data public class Pagination { - private boolean fetchLatest; - private Sort.Direction direction; private long startingFrom; diff --git a/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java b/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java index 728bf4d..1656024 100644 --- a/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java +++ b/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java @@ -3,22 +3,27 @@ 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.Pattern; import ru.serega6531.packmate.model.Stream; import java.util.List; public interface StreamRepository extends JpaRepository { - List findAllByFavorite(Pageable pageable, boolean favorite); - List findAllByIdGreaterThanAndFavorite(long streamId, boolean favorite, Pageable pageable); List findAllByIdLessThanAndFavorite(long streamId, boolean favorite, Pageable pageable); - List findAllByServiceAndFavorite(CtfService service, boolean favorite, Pageable pageable); + List findAllByIdGreaterThanAndFavoriteAndFoundPatternsContaining(long streamId, boolean favorite, Pattern pattern, Pageable pageable); + + List findAllByIdLessThanAndFavoriteAndFoundPatternsContaining(long streamId, boolean favorite, Pattern pattern, Pageable pageable); List findAllByServiceAndIdGreaterThanAndFavorite(CtfService service, long streamId, boolean favorite, Pageable pageable); List findAllByServiceAndIdLessThanAndFavorite(CtfService service, long streamId, boolean favorite, Pageable pageable); + List findAllByServiceAndIdGreaterThanAndFavoriteAndFoundPatternsContaining(CtfService service, long streamId, boolean favorite, Pattern pattern, Pageable pageable); + + List findAllByServiceAndIdLessThanAndFavoriteAndFoundPatternsContaining(CtfService service, long streamId, boolean favorite, Pattern pattern, 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 809e290..1a43547 100644 --- a/src/main/java/ru/serega6531/packmate/service/StreamService.java +++ b/src/main/java/ru/serega6531/packmate/service/StreamService.java @@ -67,10 +67,10 @@ public class StreamService { stream.setEndTimestamp(packets.get(packets.size() - 1).getTimestamp()); stream.setService(serviceOptional.get()); - if(ignoreEmptyPackets) { + if (ignoreEmptyPackets) { packets.removeIf(packet -> packet.getContent().length == 0); - if(packets.isEmpty()) { + if (packets.isEmpty()) { log.debug("Стрим состоит только из пустых пакетов и не будет сохранен"); return false; } @@ -114,7 +114,7 @@ public class StreamService { @Transactional public void setFavorite(long id, boolean favorite) { final Optional streamOptional = repository.findById(id); - if(streamOptional.isPresent()) { + if (streamOptional.isPresent()) { final Stream stream = streamOptional.get(); stream.setFavorite(favorite); repository.save(stream); @@ -124,8 +124,12 @@ public class StreamService { public List findAll(Pagination pagination) { PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id"); - if(pagination.isFetchLatest()) { // последние стримы - return repository.findAllByFavorite(page, pagination.isFavorites()); + if (pagination.getPattern() != null) { // задан паттерн для поиска + if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы + return repository.findAllByIdGreaterThanAndFavoriteAndFoundPatternsContaining(pagination.getStartingFrom(), pagination.isFavorites(), pagination.getPattern(), page); + } else { // более старые стримы + return repository.findAllByIdLessThanAndFavoriteAndFoundPatternsContaining(pagination.getStartingFrom(), pagination.isFavorites(), pagination.getPattern(), page); + } } else { if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы return repository.findAllByIdGreaterThanAndFavorite(pagination.getStartingFrom(), pagination.isFavorites(), page); @@ -138,8 +142,12 @@ public class StreamService { public List findAllByService(Pagination pagination, CtfService service) { PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id"); - if(pagination.isFetchLatest()) { // последние стримы - return repository.findAllByServiceAndFavorite(service, pagination.isFavorites(), page); + if (pagination.getPattern() != null) { // задан паттерн для поиска + if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы + return repository.findAllByServiceAndIdGreaterThanAndFavoriteAndFoundPatternsContaining(service, pagination.getStartingFrom(), pagination.isFavorites(), pagination.getPattern() page); + } else { // более старые стримы + return repository.findAllByServiceAndIdLessThanAndFavoriteAndFoundPatternsContaining(service, pagination.getStartingFrom(), pagination.isFavorites(), pagination.getPattern(), page); + } } else { if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы return repository.findAllByServiceAndIdGreaterThanAndFavorite(service, pagination.getStartingFrom(), pagination.isFavorites(), page);