Рефакторинг
This commit is contained in:
@@ -7,6 +7,7 @@ import ru.serega6531.packmate.model.pojo.Pagination;
|
|||||||
import ru.serega6531.packmate.service.StreamService;
|
import ru.serega6531.packmate.service.StreamService;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/stream/")
|
@RequestMapping("/api/stream/")
|
||||||
@@ -21,20 +22,12 @@ public class StreamController {
|
|||||||
|
|
||||||
@PostMapping("/all")
|
@PostMapping("/all")
|
||||||
public List<Stream> getStreams(@RequestBody Pagination pagination) {
|
public List<Stream> getStreams(@RequestBody Pagination pagination) {
|
||||||
if (pagination.isFavorites()) {
|
return streamService.findAll(pagination, Optional.empty(), pagination.isFavorites());
|
||||||
return streamService.findFavorites(pagination);
|
|
||||||
} else {
|
|
||||||
return streamService.findAll(pagination);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/{port}")
|
@PostMapping("/{port}")
|
||||||
public List<Stream> getStreams(@PathVariable int port, @RequestBody Pagination pagination) {
|
public List<Stream> getStreams(@PathVariable int port, @RequestBody Pagination pagination) {
|
||||||
if (pagination.isFavorites()) {
|
return streamService.findAll(pagination, Optional.of(port), pagination.isFavorites());
|
||||||
return streamService.findFavoritesByService(pagination, port);
|
|
||||||
} else {
|
|
||||||
return streamService.findAllByService(pagination, port);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/{id}/favorite")
|
@PostMapping("/{id}/favorite")
|
||||||
|
|||||||
@@ -1,45 +1,8 @@
|
|||||||
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.Pattern;
|
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||||
import ru.serega6531.packmate.model.Stream;
|
import ru.serega6531.packmate.model.Stream;
|
||||||
|
|
||||||
import java.util.List;
|
public interface StreamRepository extends JpaRepository<Stream, Long>, JpaSpecificationExecutor<Stream> {
|
||||||
|
|
||||||
public interface StreamRepository extends JpaRepository<Stream, Long> {
|
|
||||||
|
|
||||||
List<Stream> findAllByIdGreaterThanAndFavoriteIsTrue(long streamId, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByIdLessThanAndFavoriteIsTrue(long streamId, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByIdGreaterThanAndFavoriteIsTrueAndFoundPatternsContaining(long streamId, Pattern pattern, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByIdLessThanAndFavoriteIsTrueAndFoundPatternsContaining(long streamId, Pattern pattern, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByServiceAndIdGreaterThanAndFavoriteIsTrue(int service, long streamId, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByServiceAndIdLessThanAndFavoriteIsTrue(int service, long streamId, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByServiceAndIdGreaterThanAndFavoriteIsTrueAndFoundPatternsContaining(int service, long streamId, Pattern pattern, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByServiceAndIdLessThanAndFavoriteIsTrueAndFoundPatternsContaining(int service, long streamId, Pattern pattern, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByIdGreaterThan(long streamId, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByIdLessThan(long streamId, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByIdGreaterThanAndFoundPatternsContaining(long streamId, Pattern pattern, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByIdLessThanAndFoundPatternsContaining(long streamId, Pattern pattern, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByServiceAndIdGreaterThan(int service, long streamId, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByServiceAndIdLessThan(int service, long streamId, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByServiceAndIdGreaterThanAndFoundPatternsContaining(int service, long streamId, Pattern pattern, Pageable pageable);
|
|
||||||
|
|
||||||
List<Stream> findAllByServiceAndIdLessThanAndFoundPatternsContaining(int service, long streamId, Pattern pattern, Pageable pageable);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.data.domain.PageRequest;
|
import org.springframework.data.domain.PageRequest;
|
||||||
import org.springframework.data.domain.Sort;
|
import org.springframework.data.domain.Sort;
|
||||||
|
import org.springframework.data.jpa.domain.Specification;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import ru.serega6531.packmate.model.*;
|
import ru.serega6531.packmate.model.*;
|
||||||
@@ -360,76 +361,49 @@ public class StreamService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Stream> findFavorites(Pagination pagination) {
|
public List<Stream> findAll(Pagination pagination, Optional<Integer> service, boolean onlyFavorites) {
|
||||||
PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id");
|
PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id");
|
||||||
|
|
||||||
if (pagination.getPattern() != null) { // задан паттерн для поиска
|
Specification<Stream> spec;
|
||||||
if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы
|
if(pagination.getDirection() == Sort.Direction.ASC) {
|
||||||
return repository.findAllByIdGreaterThanAndFavoriteIsTrueAndFoundPatternsContaining(pagination.getStartingFrom(), pagination.getPattern(), page);
|
spec = streamIdGreaterThan(pagination.getStartingFrom());
|
||||||
} else { // более старые стримы
|
|
||||||
return repository.findAllByIdLessThanAndFavoriteIsTrueAndFoundPatternsContaining(pagination.getStartingFrom(), pagination.getPattern(), page);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы
|
spec = streamIdLessThan(pagination.getStartingFrom());
|
||||||
return repository.findAllByIdGreaterThanAndFavoriteIsTrue(pagination.getStartingFrom(), page);
|
|
||||||
} else { // более старые стримы
|
|
||||||
return repository.findAllByIdLessThanAndFavoriteIsTrue(pagination.getStartingFrom(), page);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Stream> findFavoritesByService(Pagination pagination, int service) {
|
if(service.isPresent()) {
|
||||||
PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id");
|
spec = spec.and(streamServiceEquals(service.get()));
|
||||||
|
|
||||||
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<Stream> findAll(Pagination pagination) {
|
if(onlyFavorites) {
|
||||||
PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id");
|
spec = spec.and(streamIsFavorite());
|
||||||
|
|
||||||
if (pagination.getPattern() != null) { // задан паттерн для поиска
|
|
||||||
if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы
|
|
||||||
return repository.findAllByIdGreaterThanAndFoundPatternsContaining(pagination.getStartingFrom(), pagination.getPattern(), page);
|
|
||||||
} else { // более старые стримы
|
|
||||||
return repository.findAllByIdLessThanAndFoundPatternsContaining(pagination.getStartingFrom(), pagination.getPattern(), page);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы
|
|
||||||
return repository.findAllByIdGreaterThan(pagination.getStartingFrom(), page);
|
|
||||||
} else { // более старые стримы
|
|
||||||
return repository.findAllByIdLessThan(pagination.getStartingFrom(), page);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Stream> findAllByService(Pagination pagination, int service) {
|
if(pagination.getPattern() != null) {
|
||||||
PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id");
|
spec = spec.and(streamPatternsContains(pagination.getPattern()));
|
||||||
|
}
|
||||||
|
|
||||||
if (pagination.getPattern() != null) { // задан паттерн для поиска
|
return repository.findAll(spec, page).getContent();
|
||||||
if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы
|
|
||||||
return repository.findAllByServiceAndIdGreaterThanAndFoundPatternsContaining(service, pagination.getStartingFrom(), pagination.getPattern(), page);
|
|
||||||
} else { // более старые стримы
|
|
||||||
return repository.findAllByServiceAndIdLessThanAndFoundPatternsContaining(service, pagination.getStartingFrom(), pagination.getPattern(), page);
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы
|
private Specification<Stream> streamServiceEquals(long service) {
|
||||||
return repository.findAllByServiceAndIdGreaterThan(service, pagination.getStartingFrom(), page);
|
return (root, query, cb) -> cb.equal(root.get("service"), service);
|
||||||
} else { // более старые стримы
|
|
||||||
return repository.findAllByServiceAndIdLessThan(service, pagination.getStartingFrom(), page);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Specification<Stream> streamIsFavorite() {
|
||||||
|
return (root, query, cb) -> cb.equal(root.get("favorite"), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Specification<Stream> streamIdGreaterThan(long id) {
|
||||||
|
return (root, query, cb) -> cb.greaterThan(root.get("id"), id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Specification<Stream> streamIdLessThan(long id) {
|
||||||
|
return (root, query, cb) -> cb.lessThan(root.get("id"), id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Specification<Stream> streamPatternsContains(Pattern pattern) {
|
||||||
|
return (root, query, cb) -> cb.isMember(pattern, root.get("foundPatterns"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user