diff --git a/src/main/java/ru/serega6531/packmate/controller/StreamController.java b/src/main/java/ru/serega6531/packmate/controller/StreamController.java index 7880e48..2dd089c 100644 --- a/src/main/java/ru/serega6531/packmate/controller/StreamController.java +++ b/src/main/java/ru/serega6531/packmate/controller/StreamController.java @@ -27,14 +27,22 @@ public class StreamController { @PostMapping("/all") public List getStreams(@RequestBody Pagination pagination) { - return streamService.findAll(pagination); + if (pagination.isFavorites()) { + return streamService.findFavorites(pagination); + } else { + return streamService.findAll(pagination); + } } @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()); + if (serviceOptional.isPresent()) { + if (pagination.isFavorites()) { + return streamService.findFavoritesByService(pagination, serviceOptional.get()); + } else { + 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 1656024..c3c0a47 100644 --- a/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java +++ b/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java @@ -10,20 +10,37 @@ import java.util.List; public interface StreamRepository extends JpaRepository { - List findAllByIdGreaterThanAndFavorite(long streamId, boolean favorite, Pageable pageable); + List findAllByIdGreaterThanAndFavoriteIsTrue(long streamId, Pageable pageable); - List findAllByIdLessThanAndFavorite(long streamId, boolean favorite, Pageable pageable); + List findAllByIdLessThanAndFavoriteIsTrue(long streamId, Pageable pageable); - List findAllByIdGreaterThanAndFavoriteAndFoundPatternsContaining(long streamId, boolean favorite, Pattern pattern, Pageable pageable); + List findAllByIdGreaterThanAndFavoriteIsTrueAndFoundPatternsContaining(long streamId, Pattern pattern, Pageable pageable); - List findAllByIdLessThanAndFavoriteAndFoundPatternsContaining(long streamId, boolean favorite, Pattern pattern, Pageable pageable); + List findAllByIdLessThanAndFavoriteIsTrueAndFoundPatternsContaining(long streamId, Pattern pattern, Pageable pageable); - List findAllByServiceAndIdGreaterThanAndFavorite(CtfService service, long streamId, boolean favorite, Pageable pageable); + List findAllByServiceAndIdGreaterThanAndFavoriteIsTrue(CtfService service, long streamId, Pageable pageable); - List findAllByServiceAndIdLessThanAndFavorite(CtfService service, long streamId, boolean favorite, Pageable pageable); + List findAllByServiceAndIdLessThanAndFavoriteIsTrue(CtfService service, long streamId, Pageable pageable); - List findAllByServiceAndIdGreaterThanAndFavoriteAndFoundPatternsContaining(CtfService service, long streamId, boolean favorite, Pattern pattern, Pageable pageable); + List findAllByServiceAndIdGreaterThanAndFavoriteIsTrueAndFoundPatternsContaining(CtfService service, long streamId, Pattern pattern, Pageable pageable); + + List findAllByServiceAndIdLessThanAndFavoriteIsTrueAndFoundPatternsContaining(CtfService service, long streamId, Pattern pattern, Pageable pageable); + + List findAllByIdGreaterThan(long streamId, Pageable pageable); + + List findAllByIdLessThan(long streamId, Pageable pageable); + + List findAllByIdGreaterThanAndFoundPatternsContaining(long streamId, Pattern pattern, Pageable pageable); + + List findAllByIdLessThanAndFoundPatternsContaining(long streamId, Pattern pattern, Pageable pageable); + + List findAllByServiceAndIdGreaterThan(CtfService service, long streamId, Pageable pageable); + + List findAllByServiceAndIdLessThan(CtfService service, long streamId, Pageable pageable); + + List findAllByServiceAndIdGreaterThanAndFoundPatternsContaining(CtfService service, long streamId, Pattern pattern, Pageable pageable); + + List findAllByServiceAndIdLessThanAndFoundPatternsContaining(CtfService service, long streamId, 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 f1d5255..ccd627b 100644 --- a/src/main/java/ru/serega6531/packmate/service/StreamService.java +++ b/src/main/java/ru/serega6531/packmate/service/StreamService.java @@ -168,20 +168,56 @@ public class StreamService { } } + public List findFavorites(Pagination pagination) { + PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id"); + + if (pagination.getPattern() != null) { // задан паттерн для поиска + if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы + return repository.findAllByIdGreaterThanAndFavoriteIsTrueAndFoundPatternsContaining(pagination.getStartingFrom(), pagination.getPattern(), page); + } else { // более старые стримы + return repository.findAllByIdLessThanAndFavoriteIsTrueAndFoundPatternsContaining(pagination.getStartingFrom(), pagination.getPattern(), page); + } + } else { + if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы + return repository.findAllByIdGreaterThanAndFavoriteIsTrue(pagination.getStartingFrom(), page); + } else { // более старые стримы + return repository.findAllByIdLessThanAndFavoriteIsTrue(pagination.getStartingFrom(), page); + } + } + } + + public List findFavoritesByService(Pagination pagination, CtfService service) { + PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id"); + + if (pagination.getPattern() != null) { // задан паттерн для поиска + if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы + return repository.findAllByServiceAndIdGreaterThanAndFavoriteIsTrueAndFoundPatternsContaining(service, pagination.getStartingFrom(), pagination.getPattern(), page); + } else { // более старые стримы + return repository.findAllByServiceAndIdLessThanAndFavoriteIsTrueAndFoundPatternsContaining(service, pagination.getStartingFrom(), pagination.getPattern(), page); + } + } else { + if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы + return repository.findAllByServiceAndIdGreaterThanAndFavoriteIsTrue(service, pagination.getStartingFrom(), page); + } else { // более старые стримы + return repository.findAllByServiceAndIdLessThanAndFavoriteIsTrue(service, pagination.getStartingFrom(), page); + } + } + } + public List findAll(Pagination pagination) { PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id"); if (pagination.getPattern() != null) { // задан паттерн для поиска if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы - return repository.findAllByIdGreaterThanAndFavoriteAndFoundPatternsContaining(pagination.getStartingFrom(), pagination.isFavorites(), pagination.getPattern(), page); + return repository.findAllByIdGreaterThanAndFoundPatternsContaining(pagination.getStartingFrom(), pagination.getPattern(), page); } else { // более старые стримы - return repository.findAllByIdLessThanAndFavoriteAndFoundPatternsContaining(pagination.getStartingFrom(), pagination.isFavorites(), pagination.getPattern(), page); + return repository.findAllByIdLessThanAndFoundPatternsContaining(pagination.getStartingFrom(), pagination.getPattern(), page); } } else { if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы - return repository.findAllByIdGreaterThanAndFavorite(pagination.getStartingFrom(), pagination.isFavorites(), page); + return repository.findAllByIdGreaterThan(pagination.getStartingFrom(), page); } else { // более старые стримы - return repository.findAllByIdLessThanAndFavorite(pagination.getStartingFrom(), pagination.isFavorites(), page); + return repository.findAllByIdLessThan(pagination.getStartingFrom(), page); } } } @@ -191,15 +227,15 @@ public class StreamService { if (pagination.getPattern() != null) { // задан паттерн для поиска if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы - return repository.findAllByServiceAndIdGreaterThanAndFavoriteAndFoundPatternsContaining(service, pagination.getStartingFrom(), pagination.isFavorites(), pagination.getPattern(), page); + return repository.findAllByServiceAndIdGreaterThanAndFoundPatternsContaining(service, pagination.getStartingFrom(), pagination.getPattern(), page); } else { // более старые стримы - return repository.findAllByServiceAndIdLessThanAndFavoriteAndFoundPatternsContaining(service, pagination.getStartingFrom(), pagination.isFavorites(), pagination.getPattern(), page); + return repository.findAllByServiceAndIdLessThanAndFoundPatternsContaining(service, pagination.getStartingFrom(), pagination.getPattern(), page); } } else { if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы - return repository.findAllByServiceAndIdGreaterThanAndFavorite(service, pagination.getStartingFrom(), pagination.isFavorites(), page); + return repository.findAllByServiceAndIdGreaterThan(service, pagination.getStartingFrom(), page); } else { // более старые стримы - return repository.findAllByServiceAndIdLessThanAndFavorite(service, pagination.getStartingFrom(), pagination.isFavorites(), page); + return repository.findAllByServiceAndIdLessThan(service, pagination.getStartingFrom(), page); } } }