diff --git a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/controler/DatasetController.java b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/controler/DatasetController.java index 2f7e9ae..215c412 100644 --- a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/controler/DatasetController.java +++ b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/controler/DatasetController.java @@ -1,17 +1,23 @@ package de.uni_passau.fim.PADAS.group3.DataDash.controler; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.web.bind.annotation.*; - import de.uni_passau.fim.PADAS.group3.DataDash.model.Dataset; import de.uni_passau.fim.PADAS.group3.DataDash.model.DatasetService; import de.uni_passau.fim.PADAS.group3.DataDash.model.Type; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.config.EnableSpringDataWebSupport; +import org.springframework.data.domain.Sort; + import java.util.List; import java.util.UUID; @RestController @RequestMapping("/api/v1/datasets") +@EnableSpringDataWebSupport public class DatasetController { @Autowired private DatasetService datasetService; @@ -87,14 +93,27 @@ public class DatasetController { return null; // new ResponseEntity<>(null, HttpStatus.OK); } - @GetMapping - public List getDatasetsByDateAfter(@RequestParam(value = "author", required = false) String author, + @GetMapping("/find") + public Page 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, @RequestParam(value = "type", required = false) Type type, - @RequestParam(value = "min-raiting", required = false) Float raiting) { - return datasetService.getDatasetsByOptionalCriteria(title, description, author, abst, type, raiting); + @RequestParam(value = "min-raiting", required = false) Float raiting, + @RequestParam(value = "page", required = false) int page, + @RequestParam(value = "size", required = false) int size) { + Pageable pageable = PageRequest.of(page, size); + return datasetService.getDatasetsByOptionalCriteria(title, description, author, abst, type, raiting, pageable); + } + + @GetMapping + public Page search(@RequestParam(value = "search", required = false, defaultValue = "%") String search, + @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){ + Pageable pageable = PageRequest.of(page, size, Sort.by(direction.equals("asc") ? Sort.Direction.ASC : Sort.Direction.DESC, sort)); + return datasetService.searchByOptionalCriteria(search, pageable); } } \ No newline at end of file diff --git a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/Dataset.java b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/Dataset.java index 8088341..aba5a6f 100644 --- a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/Dataset.java +++ b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/Dataset.java @@ -1,5 +1,6 @@ package de.uni_passau.fim.PADAS.group3.DataDash.model; +import java.net.URL; import java.sql.Date; import java.util.UUID; import jakarta.persistence.Entity; @@ -35,6 +36,8 @@ public class Dataset { private int upvotes; + private URL url; + private String[] categories; public Dataset(String title, String abst, String description, String author, Date date, String[] categories, Type type) { @@ -49,6 +52,7 @@ public class Dataset { setDate(date); setCategories(categories); setType(type); + setUrl(url); } public Dataset() { @@ -99,6 +103,10 @@ public class Dataset { return upvotes; } + public URL getUrl() { + return url; + } + public void setAbst(String abst) { this.abst = abst.substring(0, Math.min(abst.length(), 100)); } @@ -118,6 +126,10 @@ public class Dataset { public void setDescription(String description) { this.description = description; } + + public void setUrl(URL url) { + this.url = url; + } public void setTitle(String title) { this.title = title.substring(0, Math.min(title.length(), 50)); diff --git a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/DatasetService.java b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/DatasetService.java index 71bab92..6832975 100644 --- a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/DatasetService.java +++ b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/DatasetService.java @@ -4,7 +4,11 @@ import java.util.List; import java.util.Optional; import java.util.UUID; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import org.apache.juli.logging.Log; +import org.springframework.data.domain.Page; + @Service public class DatasetService { @@ -75,11 +79,19 @@ public class DatasetService { datasetRepository.save(dataset); } - public List getDatasetsByOptionalCriteria(String title, String description, String author, String abst, - Type type, Float raiting) { + public Page getDatasetsByOptionalCriteria(String title, String description, String author, String abst, + Type type, Float raiting, Pageable pageable) { String[] categories = null; return datasetRepository.findByOptionalCriteria(Optional.ofNullable(title), Optional.ofNullable(description), Optional.ofNullable(author), Optional.ofNullable(abst), Optional.ofNullable(type), - Optional.ofNullable(categories), Optional.ofNullable(raiting)); + Optional.ofNullable(categories), Optional.ofNullable(raiting), pageable); + } + + public Page searchByOptionalCriteria(String search, Pageable pageable) { + if (search.equals("%")) { + System.out.println("searching for all datasets"); + return datasetRepository.findAll(pageable); + } + return datasetRepository.searchByOptionalCriteria(Optional.ofNullable(search), pageable); } } \ No newline at end of file diff --git a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/dataRepository.java b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/dataRepository.java index 87b0687..ecfb331 100644 --- a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/dataRepository.java +++ b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/dataRepository.java @@ -5,10 +5,13 @@ import java.util.Optional; import java.util.UUID; import java.sql.Date; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; 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 getDatasetById(UUID id); @@ -25,7 +28,7 @@ public interface dataRepository extends JpaRepository{ List findByDateAfter(Date date); List findByDateBefore(Date date); List findByDateBetween(Date date1, Date date2); - List findAll(); + Page findAll(Pageable pageable); @Query("SELECT d FROM Dataset d WHERE " + "(COALESCE(:title, '') = '' OR d.title LIKE :title) AND " + @@ -35,12 +38,21 @@ public interface dataRepository extends JpaRepository{ "(:type IS NULL OR d.type = :type) AND"+ "(:categories IS NULL OR d.categories = :categories) AND" + "(:raiting IS NULL OR d.raiting > :raiting)") - List findByOptionalCriteria(@Param("title") Optional title, + PagefindByOptionalCriteria(@Param("title") Optional title, @Param("description") Optional description, @Param("author") Optional author, @Param("abst") Optional abst, @Param("type") Optional type, @Param("categories") Optional categories, - @Param("raiting") Optional raiting); + @Param("raiting") Optional raiting, + Pageable pageable); + + + @Query("SELECT d FROM Dataset d WHERE " + + "(LOWER(d.title) LIKE LOWER(:search)) OR " + + "(LOWER(d.description) LIKE LOWER(:search)) OR " + + "(LOWER(d.author) LIKE LOWER(:search))") + PagesearchByOptionalCriteria(@Param("search") Optional search, + Pageable pageable); } \ No newline at end of file