From 5ccfe8ddb2704bd589855fa9ef351051a15e3456 Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Fri, 28 Jun 2024 12:47:25 +0200 Subject: [PATCH 1/5] feat: Add Category enum for dataset classification & Add api endpoint --- .../controler/CategoryController.java | 18 ++++ .../DataDash/controler/DatasetController.java | 9 +- .../PADAS/group3/DataDash/model/Category.java | 14 +++ .../PADAS/group3/DataDash/model/Dataset.java | 16 ++-- .../group3/DataDash/model/DatasetService.java | 7 +- .../DataDash/model/LoadDummyDatabase.java | 2 +- .../group3/DataDash/model/dataRepository.java | 92 +++++++++++-------- 7 files changed, 102 insertions(+), 56 deletions(-) create mode 100644 src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/controler/CategoryController.java create mode 100644 src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/Category.java diff --git a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/controler/CategoryController.java b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/controler/CategoryController.java new file mode 100644 index 0000000..06454ed --- /dev/null +++ b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/controler/CategoryController.java @@ -0,0 +1,18 @@ +package de.uni_passau.fim.PADAS.group3.DataDash.controler; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import de.uni_passau.fim.PADAS.group3.DataDash.model.Category; + +import org.springframework.web.bind.annotation.GetMapping; + + +@RestController +@RequestMapping("/api/v1/categories") +public class CategoryController { + @GetMapping + public Category[] getMethodName() { + return Category.values(); + } +} 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 a9e5126..f89e028 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 @@ -4,6 +4,8 @@ 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.Category; 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; @@ -82,10 +84,11 @@ 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) Category categories) { Pageable pageable = PageRequest.of(page, size, Sort.by(direction.equals("asc") ? Sort.Direction.ASC : Sort.Direction.DESC, sort)); - return datasetService.getDatasetsByOptionalCriteria(title, description, author, abst, type, raiting, pageable); + return datasetService.getDatasetsByOptionalCriteria(title, description, author, abst, type, raiting,categories,pageable); } @GetMapping("/search") @@ -99,4 +102,4 @@ public class DatasetController { return datasetService.searchByOptionalCriteria(search, pageable); } -} \ No newline at end of file +} \ No newline at end of file diff --git a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/Category.java b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/Category.java new file mode 100644 index 0000000..b7cc30e --- /dev/null +++ b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/Category.java @@ -0,0 +1,14 @@ +package de.uni_passau.fim.PADAS.group3.DataDash.model; + +public enum Category { + HEALTH, + ENVIRONMENT, + ECONOMY, + POLITICS, + TECHNOLOGY, + SPORTS, + SCIENCE, + CULTURE, + EDUCATION, + OTHER +} 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 52cd1b4..1f23559 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 @@ -38,10 +38,10 @@ public class Dataset { private int upvotes; private URL url; + @Enumerated(EnumType.STRING) + private Category categorie; - private String[] categories; - - public Dataset(String title, String abst, String description, String author, URL url, String[] categories, Type type) { + public Dataset(String title, String abst, String description, String author, URL url, Category categories, Type type) { this.raiting = 0; this.votes = 0; @@ -51,7 +51,7 @@ public class Dataset { setDescription(description); setAuthor(author); setDate(LocalDate.now()); - setCategories(categories); + setCategorie(categories); setType(type); setUrl(url); } @@ -68,8 +68,8 @@ public class Dataset { return author; } - public String[] getCategories() { - return categories; + public Category getCategorie() { + return categorie; } public LocalDate getDate() { @@ -116,8 +116,8 @@ public class Dataset { this.author = author; } - public void setCategories(String[] categories) { - this.categories = categories; + public void setCategorie(Category categories) { + this.categorie = categories; } public void setDate(LocalDate localDate) { 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 c34e55b..b9245f4 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 @@ -85,11 +85,10 @@ public class DatasetService { } public Page getDatasetsByOptionalCriteria(String title, String description, String author, String abst, - Type type, Float raiting, Pageable pageable) { - String[] categories = null; + Type type, Float raiting, Category category, Pageable pageable) { return datasetRepository.findByOptionalCriteria(Optional.ofNullable(title), Optional.ofNullable(description), - Optional.ofNullable(author), Optional.ofNullable(abst), Optional.ofNullable(type), - Optional.ofNullable(categories), Optional.ofNullable(raiting), pageable); + Optional.ofNullable(author), Optional.ofNullable(abst), Optional.ofNullable(type), Optional.ofNullable(category), + Optional.ofNullable(raiting), pageable); } public Page searchByOptionalCriteria(String search, Pageable pageable) { diff --git a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java index ba8f166..114c117 100644 --- a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java +++ b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java @@ -23,7 +23,7 @@ public class LoadDummyDatabase { return args -> { for (int i = 0; i < 100; i++) { - Dataset dataset = new Dataset("Title" + i, "Abst" + i, "Description" + i, "Author" + i,null, new String[]{"Category" + i}, Type.API); + Dataset dataset = new Dataset("Title" + i, "Abst" + i, "Description" + i, "Author" + i,null, Category.EDUCATION, Type.API); repository.save(dataset); log.info("Preloading" + repository.save(dataset)); } 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 b2934d8..310930a 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 @@ -12,48 +12,60 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -public interface dataRepository extends JpaRepository{ +public interface dataRepository extends JpaRepository { - Dataset getDatasetById(UUID id); - List findByTitle(String title); - List findByTitleLike(String title); - List findByAuthorLike(String author); - List findByType(Type type); - List findByAuthor(String author); - List findByAbstLike(String abst); - List findByDescriptionLike(String description); - List findByCategories(String[] categories); - List findByRaitingGreaterThan(float raiting); - List findByVotesGreaterThan(int votes); - List findByDateAfter(Date date); - List findByDateBefore(Date date); - List findByDateBetween(Date date1, Date date2); - @SuppressWarnings("null") - Page findAll(Pageable pageable); + Dataset getDatasetById(UUID id); - @Query("SELECT d FROM Dataset d WHERE " + - "(COALESCE(:title, '') = '' OR d.title LIKE :title) AND " + - "(COALESCE(:description, '') = '' OR d.description LIKE :description) AND" + - "(COALESCE(:author, '') = '' OR d.author LIKE :author) AND" + - "(COALESCE(:abst, '') = '' OR d.abst LIKE :abst) AND" + - "(:type IS NULL OR d.type = :type) AND"+ - "(:categories IS NULL OR d.categories = :categories) AND" + - "(:raiting IS NULL OR d.raiting > :raiting)") - 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, - Pageable pageable); + List findByTitle(String title); + List findByTitleLike(String title); - @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); - + List findByAuthorLike(String author); + + List findByType(Type type); + + List findByAuthor(String author); + + List findByAbstLike(String abst); + + List findByDescriptionLike(String description); + + List findByRaitingGreaterThan(float raiting); + + List findByVotesGreaterThan(int votes); + + List findByDateAfter(Date date); + + List findByDateBefore(Date date); + + List findByCategorie(Category categorie); + + List findByDateBetween(Date date1, Date date2); + + @SuppressWarnings("null") + Page findAll(Pageable pageable); + + @Query("SELECT d FROM Dataset d WHERE " + + "(COALESCE(:title, '') = '' OR d.title LIKE :title) AND " + + "(COALESCE(:description, '') = '' OR d.description LIKE :description) AND" + + "(COALESCE(:author, '') = '' OR d.author LIKE :author) AND" + + "(COALESCE(:abst, '') = '' OR d.abst LIKE :abst) AND" + + "(:type IS NULL OR d.type = :type) AND" + + "(:categorie IS NULL OR d.categorie = :categorie) AND" + + "(:raiting IS NULL OR d.raiting > :raiting)") + Page findByOptionalCriteria(@Param("title") Optional title, + @Param("description") Optional description, + @Param("author") Optional author, + @Param("abst") Optional abst, + @Param("type") Optional type, + @Param("categorie") Optional categories, + @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))") + Page searchByOptionalCriteria(@Param("search") Optional search, + Pageable pageable); } \ No newline at end of file From 62a578124dffffe17e45a2414ddca576bda86801 Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Fri, 28 Jun 2024 13:03:07 +0200 Subject: [PATCH 2/5] chore: Refactor LoadDummyDatabase class to remove unused imports --- .../fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java index 114c117..42de661 100644 --- a/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java +++ b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java @@ -1,7 +1,5 @@ package de.uni_passau.fim.PADAS.group3.DataDash.model; -import java.net.URL; -import java.sql.Date; import java.util.List; import org.slf4j.LoggerFactory; From d6a8cab85aa957a516a0ee0d563b3211934c4917 Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Fri, 28 Jun 2024 13:11:43 +0200 Subject: [PATCH 3/5] chore: Refactor DatasetService to improve search functionality and remove unnecessary print statement --- .../fim/PADAS/group3/DataDash/model/DatasetService.java | 1 - 1 file changed, 1 deletion(-) 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 b9245f4..4b85f15 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 @@ -93,7 +93,6 @@ public class DatasetService { 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); From 683f18cc27415d3a29e2f7daeb5c2c0908ca2db5 Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Fri, 28 Jun 2024 13:14:19 +0200 Subject: [PATCH 4/5] chore: Refactor DatasetController to fix spaceing --- .../fim/PADAS/group3/DataDash/controler/DatasetController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 f89e028..ab56d9f 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 @@ -88,7 +88,7 @@ public class DatasetController { @RequestParam(value = "categorie", required = false) Category categories) { Pageable pageable = PageRequest.of(page, size, Sort.by(direction.equals("asc") ? Sort.Direction.ASC : Sort.Direction.DESC, sort)); - return datasetService.getDatasetsByOptionalCriteria(title, description, author, abst, type, raiting,categories,pageable); + return datasetService.getDatasetsByOptionalCriteria(title, description, author, abst, type, raiting, categories,pageable); } @GetMapping("/search") From d6d3ca2121544bd7513012b91ad737e20eadbae2 Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Fri, 28 Jun 2024 13:40:10 +0200 Subject: [PATCH 5/5] fix: Update Dataset class to use java.sql.Date for date field to fix sorting after date --- .../fim/PADAS/group3/DataDash/model/Dataset.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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 1f23559..e59ee08 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 @@ -3,6 +3,7 @@ package de.uni_passau.fim.PADAS.group3.DataDash.model; import java.net.URL; import java.time.LocalDate; import java.util.UUID; +import java.sql.Date; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -29,7 +30,7 @@ public class Dataset { private String author; - private LocalDate date; + private Date date; private float raiting; @@ -73,7 +74,7 @@ public class Dataset { } public LocalDate getDate() { - return date; + return date.toLocalDate(); } public String getDescription() { @@ -121,7 +122,7 @@ public class Dataset { } public void setDate(LocalDate localDate) { - this.date = localDate; + this.date = Date.valueOf(localDate); } public void setDescription(String description) {