From 10e339f32b2ff8d66346b80305598e76f730170e Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Mon, 17 Jun 2024 18:13:25 +0200 Subject: [PATCH 01/23] feature: add minimal API --- .../DataDash/controler/DatasetController.java | 84 +++++++++++++++++++ .../group3/DataDash/model/DatasetService.java | 65 ++++++++++++++ .../group3/DataDash/model/dataRepository.java | 3 + 3 files changed, 152 insertions(+) create mode 100644 src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/controler/DatasetController.java create mode 100644 src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/DatasetService.java 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 new file mode 100644 index 0000000..37cdf87 --- /dev/null +++ b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/controler/DatasetController.java @@ -0,0 +1,84 @@ +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.web.bind.annotation.*; + +import de.uni_passau.fim.PADAS.group3.DataDash.model.Dataset; +import de.uni_passau.fim.PADAS.group3.DataDash.model.DatasetService; + +import java.util.List; +import java.util.UUID; +import de.uni_passau.fim.PADAS.group3.DataDash.model.Type; + +import javax.swing.text.html.HTML; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + + + + @RestController + @RequestMapping("/api/datasets") + public class DatasetController { + @Autowired + private DatasetService datasetService; + + @GetMapping + public List getAllDatasets() { + return datasetService.getAllDatasets(); + } + + @GetMapping("/id/{id}") + public Dataset getDatasetById(@PathVariable("id") UUID id) { + return datasetService.getDatasetById(id); + } + + @PostMapping + public Dataset createDataset(@RequestBody Dataset dataset) { + datasetService.addDataset(dataset); + //TODO: figure out what the fuck i need to do here + return null; + } + + //@PutMapping("/{id}") + //public Dataset updateDataset(@PathVariable("id") Long id, @RequestBody Dataset dataset) { + // return datasetService.updateDataset(id, dataset); + //} + // + + @DeleteMapping("/id/{id}") + public void deleteDataset(@PathVariable("id") UUID id) { + datasetService.deleteDataset(id); + } + + @GetMapping("/title/{title}") + public List getByTitle(@PathVariable("title") String title) { + return datasetService.getDatasetsByTitleLike(title); + } + + @GetMapping("/description/{description}") + public List getbyDescription(@PathVariable("description") String description) { + return datasetService.findByDescriptionLike(description); + } + + @GetMapping("/author/{author}") + public List getByAuthor(@PathVariable("author") String author) { + return datasetService.getDatasetsByAuthorLike(author); + } + + @GetMapping("/abst/{abst}") + public List getByAbstract(@PathVariable("abst") String abst) { + return datasetService.getDatasetsByAbstLike(abst); + } + + @GetMapping("/type/{type}") + public List getByType(@PathVariable("type") Type type) { + return datasetService.getDatasetsByType(type); + } + + @GetMapping("/rating/{rating}") + public List getByType(@PathVariable("rating") float rating) { + return datasetService.getDatasetsByRaitingGreaterThan(rating); + } + +} \ No newline at end of file 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 new file mode 100644 index 0000000..0bf9a2f --- /dev/null +++ b/src/main/java/de/uni_passau/fim/PADAS/group3/DataDash/model/DatasetService.java @@ -0,0 +1,65 @@ +package de.uni_passau.fim.PADAS.group3.DataDash.model; +import java.util.List; +import java.util.UUID; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class DatasetService { + private dataRepository datasetRepository; + + @Autowired + public DatasetService(dataRepository datasetRepository) { + this.datasetRepository = datasetRepository; + } + + public List getAllDatasets() { + return datasetRepository.findAll(); + } + + public Dataset getDatasetById(UUID id) { + return datasetRepository.getDatasetById(id); + } + + public void addDataset(Dataset dataset) { + datasetRepository.save(dataset); + } + + public void updateDatasetTitle(UUID id, String title) { + datasetRepository.getDatasetById(id).setTitle(title); + } + + public void deleteDataset(UUID id) { + Dataset dataset = datasetRepository.getDatasetById(id); + datasetRepository.delete(dataset); + } + + public List getDatasetsByTitle(String title) { + return datasetRepository.findByTitle(title); + } + + public List getDatasetsByTitleLike(String title) { + return datasetRepository.findByTitleLike(title); + } + + public List findByDescriptionLike(String description) { + return datasetRepository.findByDescriptionLike(description); + } + + public List getDatasetsByAuthorLike(String author) { + return datasetRepository.findByAuthorLike(author); + } + + public List getDatasetsByType(Type type) { + return datasetRepository.findByType(type); + } + + public List getDatasetsByAbstLike(String abst) { + return datasetRepository.findByAbstLike(abst); + } + + public List getDatasetsByRaitingGreaterThan(float raiting) { + return datasetRepository.findByRaitingGreaterThan(raiting); + } +} \ 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 46fd8d4..1462932 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 @@ -3,10 +3,12 @@ package de.uni_passau.fim.PADAS.group3.DataDash.model; import java.util.List; import java.util.UUID; import java.sql.Date; + import org.springframework.data.jpa.repository.JpaRepository; public interface dataRepository extends JpaRepository{ + Dataset getDatasetById(UUID id); List findByTitle(String title); List findByTitleLike(String title); List findByAuthorLike(String author); @@ -20,5 +22,6 @@ public interface dataRepository extends JpaRepository{ List findByDateAfter(Date date); List findByDateBefore(Date date); List findByDateBetween(Date date1, Date date2); + List findAll(); } \ No newline at end of file From 4a09da87d3b076de4edd4b2731bfb88b19a4db43 Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Tue, 18 Jun 2024 12:30:55 +0200 Subject: [PATCH 02/23] chore: Refactor DatasetController and DatasetService This commit refactors the `DatasetController` and `DatasetService` classes. It updates the request mappings in the `DatasetController` class to `/api/v1/datasets` and adds new methods for upvoting and downvoting datasets. In the `DatasetService` class, it adds the `upvoteDataset` and `downvoteDataset` methods to handle dataset upvoting and downvoting. This refactoring improves code organization and functionality. --- .../DataDash/controler/DatasetController.java | 31 +++++++++++++------ .../PADAS/group3/DataDash/model/Dataset.java | 15 +++++++++ .../group3/DataDash/model/DatasetService.java | 14 +++++++-- 3 files changed, 48 insertions(+), 12 deletions(-) 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 37cdf87..47a8829 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,25 +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.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 java.util.List; import java.util.UUID; -import de.uni_passau.fim.PADAS.group3.DataDash.model.Type; - -import javax.swing.text.html.HTML; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; - @RestController - @RequestMapping("/api/datasets") - public class DatasetController { + + +@RestController +@RequestMapping("/api/v1/datasets") +public class DatasetController { @Autowired private DatasetService datasetService; @@ -81,4 +79,17 @@ import org.springframework.web.bind.annotation.RequestParam; return datasetService.getDatasetsByRaitingGreaterThan(rating); } + @PostMapping("/id/{id}/upvote") + public Dataset upvote(@PathVariable("id") UUID id) { + datasetService.upvoteDataset(id); + return null; + } + + @PostMapping("/id/{id}/downvote") + public Dataset downvote(@PathVariable("id") UUID id) { + datasetService.downvoteDataset(id); + return null; //new ResponseEntity<>(null, HttpStatus.OK); + } + + } \ 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 09bc384..8088341 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 @@ -33,12 +33,15 @@ public class Dataset { private int votes; + private int upvotes; + private String[] categories; public Dataset(String title, String abst, String description, String author, Date date, String[] categories, Type type) { this.raiting = 0; this.votes = 0; + this.upvotes = 0; setTitle(title); setAbst(abst); setDescription(description); @@ -92,6 +95,10 @@ public class Dataset { return votes; } + public int getUpvotes() { + return upvotes; + } + public void setAbst(String abst) { this.abst = abst.substring(0, Math.min(abst.length(), 100)); } @@ -124,4 +131,12 @@ public class Dataset { raiting = (raiting*votes + stars) / (++votes); } + public void upvote() { + upvotes++; + } + + public void downvote() { + upvotes--; + } + } 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 0bf9a2f..0ddefef 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 @@ -2,14 +2,12 @@ package de.uni_passau.fim.PADAS.group3.DataDash.model; import java.util.List; import java.util.UUID; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class DatasetService { private dataRepository datasetRepository; - @Autowired public DatasetService(dataRepository datasetRepository) { this.datasetRepository = datasetRepository; } @@ -62,4 +60,16 @@ public class DatasetService { public List getDatasetsByRaitingGreaterThan(float raiting) { return datasetRepository.findByRaitingGreaterThan(raiting); } + + public void upvoteDataset(UUID id) { + Dataset dataset = datasetRepository.getDatasetById(id); + dataset.upvote(); + datasetRepository.save(dataset); + } + + public void downvoteDataset(UUID id) { + Dataset dataset = datasetRepository.getDatasetById(id); + dataset.downvote(); + datasetRepository.save(dataset); + } } \ No newline at end of file From 35fcd0513bdc0bf4493b340d919018dae74535c5 Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Tue, 18 Jun 2024 13:35:15 +0200 Subject: [PATCH 03/23] chore: Refactor DatasetController and DatasetService, add upvote and downvote functionality and create new search quirey to use with request parameters --- .../DataDash/controler/DatasetController.java | 46 +++++++++++-------- .../group3/DataDash/model/DatasetService.java | 4 ++ .../group3/DataDash/model/dataRepository.java | 7 +++ 3 files changed, 37 insertions(+), 20 deletions(-) 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 47a8829..5121e6d 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 @@ -6,42 +6,41 @@ 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 java.sql.Date; import java.util.List; import java.util.UUID; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; - - - - @RestController @RequestMapping("/api/v1/datasets") public class DatasetController { @Autowired private DatasetService datasetService; - - @GetMapping - public List getAllDatasets() { - return datasetService.getAllDatasets(); - } - + + // @GetMapping + // public List getAllDatasets() { + // return datasetService.getAllDatasets(); + // } + @GetMapping("/id/{id}") public Dataset getDatasetById(@PathVariable("id") UUID id) { return datasetService.getDatasetById(id); } - + @PostMapping public Dataset createDataset(@RequestBody Dataset dataset) { datasetService.addDataset(dataset); - //TODO: figure out what the fuck i need to do here + // TODO: figure out what the fuck i need to do here return null; } - - //@PutMapping("/{id}") - //public Dataset updateDataset(@PathVariable("id") Long id, @RequestBody Dataset dataset) { - // return datasetService.updateDataset(id, dataset); - //} + + // @PutMapping("/{id}") + // public Dataset updateDataset(@PathVariable("id") Long id, @RequestBody + // Dataset dataset) { + // return datasetService.updateDataset(id, dataset); + // } // @DeleteMapping("/id/{id}") @@ -63,7 +62,7 @@ public class DatasetController { public List getByAuthor(@PathVariable("author") String author) { return datasetService.getDatasetsByAuthorLike(author); } - + @GetMapping("/abst/{abst}") public List getByAbstract(@PathVariable("abst") String abst) { return datasetService.getDatasetsByAbstLike(abst); @@ -81,15 +80,22 @@ public class DatasetController { @PostMapping("/id/{id}/upvote") public Dataset upvote(@PathVariable("id") UUID id) { - datasetService.upvoteDataset(id); + datasetService.upvoteDataset(id); return null; } @PostMapping("/id/{id}/downvote") public Dataset downvote(@PathVariable("id") UUID id) { datasetService.downvoteDataset(id); - return null; //new ResponseEntity<>(null, HttpStatus.OK); + return null; // new ResponseEntity<>(null, HttpStatus.OK); } + @GetMapping + public List getDatasetsByDateAfter(@RequestParam(value = "author", required = false, defaultValue = "%") String author, + @RequestParam(value = "title", required = false, defaultValue = "%") String title, + @RequestParam(value = "description", required = false, defaultValue = "%") String description, + @RequestParam(value = "abst", required = false, defaultValue = "%") String abst) { + return datasetService.getDatasetsBy(title, author, abst, description); + } } \ No newline at end of file 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 0ddefef..fb5c824 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 @@ -72,4 +72,8 @@ public class DatasetService { dataset.downvote(); datasetRepository.save(dataset); } + + public List getDatasetsBy(String title, String author, String abst, String description) { + return datasetRepository.findBy(title, author, abst, description); + } } \ 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 1462932..f616455 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,6 +5,8 @@ import java.util.UUID; import java.sql.Date; 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{ @@ -23,5 +25,10 @@ public interface dataRepository extends JpaRepository{ List findByDateBefore(Date date); List findByDateBetween(Date date1, Date date2); List findAll(); + + @Query("SELECT d FROM Dataset d WHERE d.title LIKE :title AND d.author LIKE :author AND d.abst LIKE :abst AND d.description LIKE :description") + List findBy(@Param("title") String title, @Param("author") String author, @Param("abst") String abst, @Param("description") String description); + + } \ No newline at end of file From c0de764f15193e52834688f5555c99a0c18925c6 Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Tue, 18 Jun 2024 15:09:07 +0200 Subject: [PATCH 04/23] Refactor DatasetController and DatasetService, improve search query and add optional criteria This commit refactors the `DatasetController` and `DatasetService` classes. It updates the request mappings in the `DatasetController` class to `/api/v1/datasets` and adds new methods for upvoting and downvoting datasets. In the `DatasetService` class, it adds the `upvoteDataset` and `downvoteDataset` methods to handle dataset upvoting and downvoting. Additionally, it improves the search query in the `getDatasetsByDateAfter` method by adding optional criteria for title, description, author, abstract, type, and minimum rating. This refactoring enhances code organization, functionality, and search capabilities. --- .../DataDash/controler/DatasetController.java | 15 +++++++------- .../group3/DataDash/model/DatasetService.java | 14 +++++++++++-- .../group3/DataDash/model/dataRepository.java | 20 +++++++++++++++++-- 3 files changed, 37 insertions(+), 12 deletions(-) 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 5121e6d..2f7e9ae 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 @@ -7,11 +7,8 @@ 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 java.sql.Date; import java.util.List; import java.util.UUID; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; @RestController @RequestMapping("/api/v1/datasets") @@ -91,11 +88,13 @@ public class DatasetController { } @GetMapping - public List getDatasetsByDateAfter(@RequestParam(value = "author", required = false, defaultValue = "%") String author, - @RequestParam(value = "title", required = false, defaultValue = "%") String title, - @RequestParam(value = "description", required = false, defaultValue = "%") String description, - @RequestParam(value = "abst", required = false, defaultValue = "%") String abst) { - return datasetService.getDatasetsBy(title, author, abst, description); + public List 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); } } \ No newline at end of file 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 fb5c824..221330f 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 @@ -1,5 +1,7 @@ package de.uni_passau.fim.PADAS.group3.DataDash.model; + import java.util.List; +import java.util.Optional; import java.util.UUID; import org.springframework.stereotype.Service; @@ -73,7 +75,15 @@ public class DatasetService { datasetRepository.save(dataset); } - public List getDatasetsBy(String title, String author, String abst, String description) { - return datasetRepository.findBy(title, author, abst, description); + //public List getDatasetsBy(String title, String author, String abst, String description) { + // return datasetRepository.findBy(title, author, abst, description); + //} + + public List getDatasetsByOptionalCriteria(String title, String description, String author, String abst, + Type type, Float raiting) { + 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)); } } \ 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 f616455..b121ddd 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 @@ -1,6 +1,7 @@ package de.uni_passau.fim.PADAS.group3.DataDash.model; import java.util.List; +import java.util.Optional; import java.util.UUID; import java.sql.Date; @@ -26,9 +27,24 @@ public interface dataRepository extends JpaRepository{ List findByDateBetween(Date date1, Date date2); List findAll(); - @Query("SELECT d FROM Dataset d WHERE d.title LIKE :title AND d.author LIKE :author AND d.abst LIKE :abst AND d.description LIKE :description") - List findBy(@Param("title") String title, @Param("author") String author, @Param("abst") String abst, @Param("description") String description); + //@Query("SELECT d FROM Dataset d WHERE d.title LIKE :title AND d.author LIKE :author AND d.abst LIKE :abst AND d.description LIKE :description") + //List findBy(@Param("title") String title, @Param("author") String author, @Param("abst") String abst, @Param("description") String description); + @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)") + List findByOptionalCriteria(@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); } \ No newline at end of file From 7597652f57d162c229ad834f92e4cac2a4f38151 Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Tue, 18 Jun 2024 15:24:32 +0200 Subject: [PATCH 05/23] chore: Remove commented out code for dataset search --- .../fim/PADAS/group3/DataDash/model/DatasetService.java | 4 ---- .../fim/PADAS/group3/DataDash/model/dataRepository.java | 4 ---- 2 files changed, 8 deletions(-) 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 221330f..71bab92 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 @@ -75,10 +75,6 @@ public class DatasetService { datasetRepository.save(dataset); } - //public List getDatasetsBy(String title, String author, String abst, String description) { - // return datasetRepository.findBy(title, author, abst, description); - //} - public List getDatasetsByOptionalCriteria(String title, String description, String author, String abst, Type type, Float raiting) { String[] categories = null; 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 b121ddd..87b0687 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 @@ -27,10 +27,6 @@ public interface dataRepository extends JpaRepository{ List findByDateBetween(Date date1, Date date2); List findAll(); - //@Query("SELECT d FROM Dataset d WHERE d.title LIKE :title AND d.author LIKE :author AND d.abst LIKE :abst AND d.description LIKE :description") - //List findBy(@Param("title") String title, @Param("author") String author, @Param("abst") String abst, @Param("description") String description); - - @Query("SELECT d FROM Dataset d WHERE " + "(COALESCE(:title, '') = '' OR d.title LIKE :title) AND " + "(COALESCE(:description, '') = '' OR d.description LIKE :description) AND" + From cddfdf546a4d77bd2fbe3f0d9f860c256fc9cab5 Mon Sep 17 00:00:00 2001 From: J-Klinke Date: Tue, 18 Jun 2024 15:57:08 +0200 Subject: [PATCH 06/23] js skeleton implemented --- src/main/resources/static/main.js | 61 +++++++++++++++++++++++++ src/main/resources/templates/index.html | 3 +- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/static/main.js diff --git a/src/main/resources/static/main.js b/src/main/resources/static/main.js new file mode 100644 index 0000000..cb3f480 --- /dev/null +++ b/src/main/resources/static/main.js @@ -0,0 +1,61 @@ + +const addButton = document.getElementById("add-btn"); +addButton.addEventListener("click", () => { + navigateToAdd(); +}); + +const filterButton = document.getElementById("filter-btn"); +filterButton.addEventListener("change", () => { + const filterString = filterButton.value; + filter(filterString); +}); + +const searchButton = document.getElementById("search-btn"); +searchButton.addEventListener("click", () => { + const searchString = searchBar.value; + search(searchString); +}); +const searchBar = document.getElementById("search-entry"); +searchBar.addEventListener("change", () => { + const searchString = searchBar.value; + search(searchString); +}); + +const sortButton = document.getElementById("sort-btn"); +sortButton.addEventListener("change", () => { + const sortString = sortButton.value; + sort(sortString); +}); + +const upvoteButton = document.getElementsByClassName("upvote-btn"); +upvoteButton.addEventListener("click", () => { + //const entryID = ; + vote(entryID, true); +}); + +const downvoteButton = document.getElementsByClassName("downvote-btn"); +downvoteButton.addEventListener("click", () => { + //const entryID; + vote(entryID, false); +}); + +function navigateToAdd() { + +} + +function filter(filterString) { + +} + +function search(searchString) { + +} + +function sort(sortString) { + +} + +function vote(entryID, up) { + fetch() + +} \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 2ac398e..15c2664 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -4,7 +4,8 @@ DataDash - + +
From d5fd98a0666b025ee901c4f70719cc67391a152a Mon Sep 17 00:00:00 2001 From: J-Klinke Date: Tue, 18 Jun 2024 16:38:09 +0200 Subject: [PATCH 07/23] main.js further implemented --- src/main/resources/static/main.js | 27 +++++++++++++++---------- src/main/resources/templates/index.html | 6 +++--- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/main/resources/static/main.js b/src/main/resources/static/main.js index cb3f480..c7ab0aa 100644 --- a/src/main/resources/static/main.js +++ b/src/main/resources/static/main.js @@ -16,7 +16,7 @@ searchButton.addEventListener("click", () => { search(searchString); }); const searchBar = document.getElementById("search-entry"); -searchBar.addEventListener("change", () => { +searchBar.addEventListener("input", () => { const searchString = searchBar.value; search(searchString); }); @@ -27,17 +27,23 @@ sortButton.addEventListener("change", () => { sort(sortString); }); -const upvoteButton = document.getElementsByClassName("upvote-btn"); -upvoteButton.addEventListener("click", () => { - //const entryID = ; +const upvoteButtons = document.getElementsByClassName("upvote-btn"); +const upvoteButtonClickListener = () => { + const entryID = upvoteButton.parent.dataset.id; vote(entryID, true); -}); +}; +for (const upvoteButton of upvoteButtons) { + upvoteButton.addEventListener("click", upvoteButtonClickListener); +} -const downvoteButton = document.getElementsByClassName("downvote-btn"); -downvoteButton.addEventListener("click", () => { - //const entryID; +const downvoteButtons = document.getElementsByClassName("downvote-btn"); +const downvoteButtonClickListener = () => { + const entryID = downvoteButton.parent.dataset.id; vote(entryID, false); -}); +}; +for (const downvoteButton of downvoteButtons) { + downvoteButton.addEventListener("click", downvoteButtonClickListener); +} function navigateToAdd() { @@ -48,7 +54,7 @@ function filter(filterString) { } function search(searchString) { - + console.log(searchString); } function sort(sortString) { @@ -57,5 +63,4 @@ function sort(sortString) { function vote(entryID, up) { fetch() - } \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 15c2664..d345799 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -4,8 +4,8 @@ DataDash - - + +
@@ -38,7 +38,7 @@

Recently added:

    -
  • +
  • From 65d9e8ea1f440e533808b239833ba350a9fcc6f0 Mon Sep 17 00:00:00 2001 From: J-Klinke Date: Thu, 20 Jun 2024 15:07:00 +0200 Subject: [PATCH 08/23] main.js mostly done, started implmenting contentUtility.js added sort options to index.html --- src/main/resources/static/contentUtility.js | 11 +++++ src/main/resources/static/main.js | 46 +++++++++++++++++---- src/main/resources/templates/index.html | 10 ++++- 3 files changed, 56 insertions(+), 11 deletions(-) create mode 100644 src/main/resources/static/contentUtility.js diff --git a/src/main/resources/static/contentUtility.js b/src/main/resources/static/contentUtility.js new file mode 100644 index 0000000..eb2c2ce --- /dev/null +++ b/src/main/resources/static/contentUtility.js @@ -0,0 +1,11 @@ +function fetchQuery(fetchString) { + fetch(fetchString) + .then(resp => resp.json()) + .then((data) => { + parseContent(data.content); + }); +} + +function parseContent(content) { + +} diff --git a/src/main/resources/static/main.js b/src/main/resources/static/main.js index c7ab0aa..9b74cd2 100644 --- a/src/main/resources/static/main.js +++ b/src/main/resources/static/main.js @@ -1,3 +1,10 @@ +const baseURL = "http://" + window.location.host + "/api/v1/datasets"; +const defaultPagingValue = 20; +const lastQuery = { + url: "", + totalPages: 0, + currentPage: 0 +}; const addButton = document.getElementById("add-btn"); addButton.addEventListener("click", () => { @@ -28,8 +35,8 @@ sortButton.addEventListener("change", () => { }); const upvoteButtons = document.getElementsByClassName("upvote-btn"); -const upvoteButtonClickListener = () => { - const entryID = upvoteButton.parent.dataset.id; +const upvoteButtonClickListener = e => { + const entryID = e.target.parentElement.parentElement.dataset.id; vote(entryID, true); }; for (const upvoteButton of upvoteButtons) { @@ -37,8 +44,8 @@ for (const upvoteButton of upvoteButtons) { } const downvoteButtons = document.getElementsByClassName("downvote-btn"); -const downvoteButtonClickListener = () => { - const entryID = downvoteButton.parent.dataset.id; +const downvoteButtonClickListener = e => { + const entryID = e.target.parentElement.parentElement.dataset.id; vote(entryID, false); }; for (const downvoteButton of downvoteButtons) { @@ -50,17 +57,38 @@ function navigateToAdd() { } function filter(filterString) { - + filterString = filterString.toUpperCase(); + const fetchURL = baseURL + "?type=" + filterString + "&size=" + defaultPagingValue; + fetchQuery(fetchURL); } function search(searchString) { - console.log(searchString); + const fetchURL = baseURL + "?search=" + encodeURIComponent(searchString.length === 0?"%":searchString); + console.log(fetchURL); + fetchQuery(fetchURL); } function sort(sortString) { - + let query = sortString.toLowerCase().split(" "); + if (query[1] === "A-Z" || query[1] === "↑") { + query[1] = "asc"; + } else { + query[1] = "desc"; + } + const fetchURL = baseURL + "?sort=" + query[0] + "&direction=" + query[1]; + console.log(fetchURL); + fetchQuery(fetchURL); } function vote(entryID, up) { - fetch() -} \ No newline at end of file + console.log(baseURL + "/id/" + entryID + "/" + (up?"upvote":"downvote")); + fetch(baseURL + "/id/" + entryID + "/" + up?"upvote":"downvote"); +} + +function incrementPageCount() { + lastQuery.currentPage++; +} + + + + diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index d345799..f80de12 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -17,8 +17,14 @@
    Sort by + Filter - - + + - - + + From 056ea0885fe4942158c15482573d7717956945a7 Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Fri, 21 Jun 2024 11:12:58 +0200 Subject: [PATCH 16/23] chore: optimize imports --- .../de/uni_passau/fim/PADAS/group3/DataDash/model/Dataset.java | 3 --- .../fim/PADAS/group3/DataDash/model/DatasetService.java | 1 - 2 files changed, 4 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 5585eff..29e9b66 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,12 +1,9 @@ package de.uni_passau.fim.PADAS.group3.DataDash.model; import java.net.URL; -import java.sql.Date; import java.time.LocalDate; import java.util.UUID; -import org.springframework.cglib.core.Local; - import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; 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 6832975..10ff186 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 @@ -6,7 +6,6 @@ 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; From efd3c7ddb7dfd2a0baafea2d4b9b896b7e06499c Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Fri, 21 Jun 2024 11:34:40 +0200 Subject: [PATCH 17/23] fix: add url field --- .../fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java | 4 ++-- 1 file changed, 2 insertions(+), 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 8b1ff2d..50ef8d2 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 @@ -21,8 +21,8 @@ public class LoadDummyDatabase { return args -> { - for (int i = 0; i < 100; i++) { - Dataset dataset = new Dataset("Title" + i, "Abst" + i, "Description" + i, "Author" + i, new Date(0), new String[]{"Category" + i}, Type.API); + for (int i = 0; i < 1000; i++) { + Dataset dataset = new Dataset("Title" + i, "Abst" + i, "Description" + i, "Author" + i, new String[]{"Category" + i}, Type.API); repository.save(dataset); log.info("Preloading" + repository.save(dataset)); } From 8820f1d5efa18d0d43a54e72185b4e145ca1bd35 Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Fri, 21 Jun 2024 11:43:38 +0200 Subject: [PATCH 18/23] chore: Update Dataset constructor to include URL parameter --- .../fim/PADAS/group3/DataDash/controler/DatasetController.java | 1 - .../de/uni_passau/fim/PADAS/group3/DataDash/model/Dataset.java | 2 +- .../fim/PADAS/group3/DataDash/model/LoadDummyDatabase.java | 3 ++- 3 files changed, 3 insertions(+), 3 deletions(-) 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 e4ede5c..b24292c 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 @@ -11,7 +11,6 @@ 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 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 29e9b66..52cd1b4 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 @@ -41,7 +41,7 @@ public class Dataset { private String[] categories; - public Dataset(String title, String abst, String description, String author, String[] categories, Type type) { + public Dataset(String title, String abst, String description, String author, URL url, String[] categories, Type type) { this.raiting = 0; this.votes = 0; 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 8b1ff2d..ba8f166 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,5 +1,6 @@ package de.uni_passau.fim.PADAS.group3.DataDash.model; +import java.net.URL; import java.sql.Date; import java.util.List; @@ -22,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, new Date(0), new String[]{"Category" + i}, Type.API); + Dataset dataset = new Dataset("Title" + i, "Abst" + i, "Description" + i, "Author" + i,null, new String[]{"Category" + i}, Type.API); repository.save(dataset); log.info("Preloading" + repository.save(dataset)); } From c19459ad01db096bd3c51495ed80edf8e1dc487d Mon Sep 17 00:00:00 2001 From: Elias Schriefer Date: Fri, 21 Jun 2024 12:03:10 +0200 Subject: [PATCH 19/23] Little fixes --- src/main/resources/static/contentUtility.js | 2 +- src/main/resources/static/main.js | 31 +++++++++++---------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/main/resources/static/contentUtility.js b/src/main/resources/static/contentUtility.js index e3adfe5..61c9f36 100644 --- a/src/main/resources/static/contentUtility.js +++ b/src/main/resources/static/contentUtility.js @@ -1,4 +1,4 @@ -import {searchBarTimeout} from "./main.js" +import { searchBarTimeout } from "./main.js" export function fetchQuery(fetchString) { clearTimeout(searchBarTimeout); diff --git a/src/main/resources/static/main.js b/src/main/resources/static/main.js index 08adb7c..2f1d526 100644 --- a/src/main/resources/static/main.js +++ b/src/main/resources/static/main.js @@ -1,6 +1,6 @@ import { fetchQuery } from "./contentUtility.js"; -const baseURL = "http://" + window.location.host + "/api/v1/datasets"; +const apiEndpoint = "/api/v1/datasets"; const defaultPagingValue = 20; const lastQuery = { url: "", @@ -10,24 +10,31 @@ const lastQuery = { // definition of all buttons const addButton = document.getElementById("add-btn"); +const filterButton = document.getElementById("filter-btn"); +const searchButton = document.getElementById("search-btn"); +const searchBar = document.getElementById("search-entry"); +const sortButton = document.getElementById("sort-btn"); +const upvoteButtons = document.getElementsByClassName("upvote-btn"); +const downvoteButtons = document.getElementsByClassName("downvote-btn"); + +// ID of the timeout, because we need to cancel it at some point +export let searchBarTimeout; + +// Event listeners addButton.addEventListener("click", () => { navigateToAdd(); }); -const filterButton = document.getElementById("filter-btn"); filterButton.addEventListener("change", () => { const filterString = filterButton.value; filter(filterString); }); -const searchButton = document.getElementById("search-btn"); searchButton.addEventListener("click", () => { const searchString = searchBar.value; search(searchString); }); -const searchBar = document.getElementById("search-entry"); -export let searchBarTimeout; searchBar.addEventListener("input", () => { clearTimeout(searchBarTimeout); searchBarTimeout = setTimeout(() => { @@ -35,6 +42,7 @@ searchBar.addEventListener("input", () => { search(searchString); }, 1000); }); + searchBar.addEventListener('keypress', function (e) { if (e.key === 'Enter') { const searchString = searchBar.value; @@ -42,13 +50,11 @@ searchBar.addEventListener('keypress', function (e) { } }) -const sortButton = document.getElementById("sort-btn"); sortButton.addEventListener("change", () => { const sortString = sortButton.value; sort(sortString); }); -const upvoteButtons = document.getElementsByClassName("upvote-btn"); const upvoteButtonClickListener = e => { const entryID = e.target.parentElement.parentElement.dataset.id; vote(entryID, true); @@ -57,7 +63,6 @@ for (const upvoteButton of upvoteButtons) { upvoteButton.addEventListener("click", upvoteButtonClickListener); } -const downvoteButtons = document.getElementsByClassName("downvote-btn"); const downvoteButtonClickListener = e => { const entryID = e.target.parentElement.parentElement.dataset.id; vote(entryID, false); @@ -91,20 +96,16 @@ function sort(sortString) { } else { query[1] = "desc"; } - const fetchURL = baseURL + "?sort=" + query[0] + "&direction=" + query[1]; + const fetchURL = apiEndpoint + "?sort=" + query[0] + "&direction=" + query[1]; console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } function vote(entryID, up) { - console.log(baseURL + "/id/" + entryID + "/" + (up?"upvote":"downvote")); // TODO: remove - fetch(baseURL + "/id/" + entryID + "/" + up?"upvote":"downvote"); + console.log(apiEndpoint + "/id/" + entryID + "/" + (up ? "upvote" : "downvote")); // TODO: remove + fetch(apiEndpoint + "/id/" + entryID + "/" + (up ? "upvote" : "downvote")); } function incrementPageCount() { lastQuery.currentPage++; } - - - - From 5fda42856dfb86ec2085321342a821793558e44c Mon Sep 17 00:00:00 2001 From: Elias Schriefer Date: Fri, 21 Jun 2024 12:06:02 +0200 Subject: [PATCH 20/23] Fix filter + search urls --- src/main/resources/static/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/static/main.js b/src/main/resources/static/main.js index 2f1d526..cf8b852 100644 --- a/src/main/resources/static/main.js +++ b/src/main/resources/static/main.js @@ -78,13 +78,13 @@ function navigateToAdd() { function filter(filterString) { filterString = filterString.toUpperCase(); - const fetchURL = baseURL + "?type=" + encodeURIComponent(filterString) + "&size=" + defaultPagingValue; + const fetchURL = apiEndpoint + "?type=" + encodeURIComponent(filterString) + "&size=" + defaultPagingValue; console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } function search(searchString) { - const fetchURL = baseURL + "/search" + "?search=" + encodeURIComponent(searchString.length === 0?"%":searchString); + const fetchURL = apiEndpoint + "/search" + "?search=" + encodeURIComponent(searchString.length === 0?"%":searchString); console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } From 5168ccaf62bdf5efcac7f7b1e2e56b063e4278d9 Mon Sep 17 00:00:00 2001 From: Elias Schriefer Date: Fri, 21 Jun 2024 12:17:16 +0200 Subject: [PATCH 21/23] Rework URL construction --- src/main/resources/static/main.js | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/resources/static/main.js b/src/main/resources/static/main.js index cf8b852..be8bdc6 100644 --- a/src/main/resources/static/main.js +++ b/src/main/resources/static/main.js @@ -78,13 +78,19 @@ function navigateToAdd() { function filter(filterString) { filterString = filterString.toUpperCase(); - const fetchURL = apiEndpoint + "?type=" + encodeURIComponent(filterString) + "&size=" + defaultPagingValue; + + let fetchURL = new URL(apiEndpoint); + fetchURL.searchParams.append("type", filterString); + fetchURL.searchParams.append("size", defaultPagingValue); + console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } function search(searchString) { - const fetchURL = apiEndpoint + "/search" + "?search=" + encodeURIComponent(searchString.length === 0?"%":searchString); + let fetchURL = new URL(apiEndpoint + "/search"); + fetchURL.searchParams.append("search", searchString.length == 0 ? "%" : searchString); + console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } @@ -96,14 +102,22 @@ function sort(sortString) { } else { query[1] = "desc"; } - const fetchURL = apiEndpoint + "?sort=" + query[0] + "&direction=" + query[1]; + + let fetchURL = new URL(apiEndpoint); + fetchURL.searchParams.append("sort", query[0]); + fetchURL.searchParams.append("direction", query[1]); + console.log(fetchURL); // TODO: remove fetchQuery(fetchURL); } function vote(entryID, up) { - console.log(apiEndpoint + "/id/" + entryID + "/" + (up ? "upvote" : "downvote")); // TODO: remove - fetch(apiEndpoint + "/id/" + entryID + "/" + (up ? "upvote" : "downvote")); + const fetchURL = new URL( + `${apiEndpoint}/id/${entryID}/${up ? "up" : "down"}vote` + ); + + console.log(fetchURL); // TODO: remove + fetch(fetchURL); } function incrementPageCount() { From 8dcd311b98bb3ffbf7c1d2d9193f0522fe330410 Mon Sep 17 00:00:00 2001 From: Elias Schriefer Date: Fri, 21 Jun 2024 12:21:17 +0200 Subject: [PATCH 22/23] Add base URL to URL construction --- src/main/resources/static/main.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/resources/static/main.js b/src/main/resources/static/main.js index be8bdc6..91dd9e0 100644 --- a/src/main/resources/static/main.js +++ b/src/main/resources/static/main.js @@ -1,6 +1,7 @@ import { fetchQuery } from "./contentUtility.js"; const apiEndpoint = "/api/v1/datasets"; +const baseURL = location.origin; const defaultPagingValue = 20; const lastQuery = { url: "", @@ -79,7 +80,7 @@ function navigateToAdd() { function filter(filterString) { filterString = filterString.toUpperCase(); - let fetchURL = new URL(apiEndpoint); + let fetchURL = new URL(apiEndpoint, baseURL); fetchURL.searchParams.append("type", filterString); fetchURL.searchParams.append("size", defaultPagingValue); @@ -88,7 +89,7 @@ function filter(filterString) { } function search(searchString) { - let fetchURL = new URL(apiEndpoint + "/search"); + let fetchURL = new URL(apiEndpoint + "/search", baseURL); fetchURL.searchParams.append("search", searchString.length == 0 ? "%" : searchString); console.log(fetchURL); // TODO: remove @@ -103,7 +104,7 @@ function sort(sortString) { query[1] = "desc"; } - let fetchURL = new URL(apiEndpoint); + let fetchURL = new URL(apiEndpoint, baseURL); fetchURL.searchParams.append("sort", query[0]); fetchURL.searchParams.append("direction", query[1]); @@ -113,7 +114,8 @@ function sort(sortString) { function vote(entryID, up) { const fetchURL = new URL( - `${apiEndpoint}/id/${entryID}/${up ? "up" : "down"}vote` + `${apiEndpoint}/id/${entryID}/${up ? "up" : "down"}vote`, + baseURL, ); console.log(fetchURL); // TODO: remove From 5df6a65f1b2b389b43597d82b0ef61088fffa5ba Mon Sep 17 00:00:00 2001 From: Erik Foris Date: Sat, 22 Jun 2024 13:34:44 +0200 Subject: [PATCH 23/23] feature: add ability to vote on datasets --- .../group3/DataDash/controler/DatasetController.java | 12 ++++++++++++ .../PADAS/group3/DataDash/model/DatasetService.java | 6 ++++++ 2 files changed, 18 insertions(+) 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 b24292c..64f92cd 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 @@ -12,6 +12,8 @@ import org.springframework.data.web.config.EnableSpringDataWebSupport; import org.springframework.data.domain.Sort; import java.util.UUID; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; @RestController @RequestMapping("/api/v1/datasets") @@ -61,6 +63,16 @@ public class DatasetController { return null; // new ResponseEntity<>(null, HttpStatus.OK); } + @PostMapping("/id/{id}/vote") + public String postMethodName(@PathVariable("id") UUID id, + @RequestParam("stars") int stars) { + if (stars > 0 && stars < 6) { + datasetService.voteDataset(id, stars); + return null; + } + return "Invalid vote"; + } + @GetMapping public Page getDatasetsByDateAfter(@RequestParam(value = "author", required = false) String author, @RequestParam(value = "title", required = false) String title, 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 10ff186..c34e55b 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 @@ -33,6 +33,12 @@ public class DatasetService { datasetRepository.getDatasetById(id).setTitle(title); } + public void voteDataset(UUID id, int vote) { + Dataset dataset = datasetRepository.getDatasetById(id); + dataset.vote(vote); + datasetRepository.save(dataset); + } + public void deleteDataset(UUID id) { Dataset dataset = datasetRepository.getDatasetById(id); datasetRepository.delete(dataset);