feat: implement ability to combine search and filters

This commit is contained in:
Erik Foris 2024-07-01 12:17:28 +02:00
parent 89957dfbe4
commit 93b604fe5b
3 changed files with 17 additions and 11 deletions

View File

@ -75,7 +75,7 @@ public class DatasetController {
}
@GetMapping
public Page<Dataset> getDatasetsByDateAfter(@RequestParam(value = "author", required = false) String author,
public Page<Dataset> getDatasetsByDateAfter(@RequestParam(value = "author", required = false) String author,
@RequestParam(value = "title", required = false) String title,
@RequestParam(value = "description", required = false) String description,
@RequestParam(value = "abst", required = false) String abst,
@ -96,10 +96,12 @@ public class DatasetController {
@RequestParam(value = "page", required = false, defaultValue = "0") int page,
@RequestParam(value = "size", required = false, defaultValue = "20") int size,
@RequestParam(value = "sort", required = false, defaultValue = "upvotes") String sort,
@RequestParam(value = "direction", required = false, defaultValue = "desc") String direction) {
@RequestParam(value = "direction", required = false, defaultValue = "desc") String direction,
@RequestParam(value = "categorie", required = false, defaultValue = "%") String categories,
@RequestParam(value = "type", required = false, defaultValue = "%") String type){
Pageable pageable = PageRequest.of(page, size,
Sort.by(direction.equals("asc") ? Sort.Direction.ASC : Sort.Direction.DESC, sort));
return datasetService.searchByOptionalCriteria(search, pageable);
return datasetService.searchByOptionalCriteria(search, categories, type, pageable);
}
}

View File

@ -91,10 +91,11 @@ public class DatasetService {
Optional.ofNullable(raiting), pageable);
}
public Page<Dataset> searchByOptionalCriteria(String search, Pageable pageable) {
if (search.equals("%")) {
return datasetRepository.findAll(pageable);
}
return datasetRepository.searchByOptionalCriteria(Optional.ofNullable(search), pageable);
public Page<Dataset> searchByOptionalCriteria(String search, String categories, String type, Pageable pageable) {
//TODO: make it not Crash
Category category = categories.equals("%") ? null : Category.valueOf(categories);
Type t = type.equals("%") ? null : Type.valueOf(type);
return datasetRepository.searchByOptionalCriteria(Optional.ofNullable(search), Optional.ofNullable(category), Optional.ofNullable(t),pageable);
}
}

View File

@ -11,7 +11,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
public interface dataRepository extends JpaRepository<Dataset, UUID> {
Dataset getDatasetById(UUID id);
@ -63,9 +62,13 @@ public interface dataRepository extends JpaRepository<Dataset, UUID> {
Pageable pageable);
@Query("SELECT d FROM Dataset d WHERE " +
"(LOWER(d.title) LIKE LOWER(:search)) OR " +
"((LOWER(d.title) LIKE LOWER(:search)) OR " +
"(LOWER(d.description) LIKE LOWER(:search)) OR " +
"(LOWER(d.author) LIKE LOWER(:search))")
"(LOWER(d.author) LIKE LOWER(:search))) AND" +
"(:categorie IS NULL OR d.categorie = :categorie) AND" +
"(:type IS NULL OR d.type = :type)")
Page<Dataset> searchByOptionalCriteria(@Param("search") Optional<String> search,
@Param("categorie") Optional<Category> categories,
@Param("type") Optional<Type> type,
Pageable pageable);
}