From eacdf8d47a94b5b2003cc84a2cdc6c9a3d263cf4 Mon Sep 17 00:00:00 2001 From: Bartha Maxime <231026@umons.ac.be> Date: Sun, 14 Apr 2024 23:29:51 +0200 Subject: [PATCH] stats Service and endpoint todo: statsRepository --- .../Clyde/EndPoints/MockController.java | 4 +- .../StatController.java | 40 +++++++++++++++++++ .../ResearchRepository.java | 6 +++ .../StatsRepository.java | 27 +++++++++++++ .../StatisticsService.java | 37 +++++++++++++++++ .../ScientificPublications/Research.java | 1 - 6 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 backend/src/main/java/ovh/herisson/Clyde/EndPoints/ScientificPublications/StatController.java create mode 100644 backend/src/main/java/ovh/herisson/Clyde/Repositories/ScientificPublications/StatsRepository.java create mode 100644 backend/src/main/java/ovh/herisson/Clyde/Services/ScientificPublications/StatisticsService.java diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java index 411aa92..05f939f 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/MockController.java @@ -112,11 +112,11 @@ public class MockController { Researcher output = researchesService.saveResearcher(jojoResearcherAccount); - Research jojoResearch = new Research("Graphs : Advanced Search Algorithms",output,new Date(), + Research jojoResearch = new Research("Graphs : Advanced Search Algorithms",output,new Date(0), PaperType.Article,"here",null,"english", Access.OpenSource,"IT","This Article's title speak for itself\n We'll discuss about advanced Graph search Algorithms"); - Research restrictedResearch = new Research("Graphs : Advanced Search Algorithms",output,new Date(), + Research restrictedResearch = new Research("Graphs : Advanced Search Algorithms",output,new Date(1111111111), PaperType.Article,"restricted",null,"english", Access.Restricted,"Restricted","This Article's title speak for itself\n We'll discuss about advanced Graph search Algorithms"); diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ScientificPublications/StatController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ScientificPublications/StatController.java new file mode 100644 index 0000000..3809d29 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/ScientificPublications/StatController.java @@ -0,0 +1,40 @@ +package ovh.herisson.Clyde.EndPoints.ScientificPublications; + +import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import ovh.herisson.Clyde.Services.ScientificPublications.ResearchesService; +import ovh.herisson.Clyde.Services.ScientificPublications.StatisticsService; +import ovh.herisson.Clyde.Tables.ScientificPublications.Researcher; + +import java.util.Map; + +@RestController +@CrossOrigin(originPatterns = "*", allowCredentials = "true") +@AllArgsConstructor +public class StatController { + + + private StatisticsService statServ; + private ResearchesService researchesServ; + + /** returns all the statistics in a 2D array + * + * @param id the researcher's id + * @return all the stats in a 2D array + */ + @GetMapping("/stats/{id}") + public ResponseEntity>>> getStat(@PathVariable Long id){ + + Researcher researcher = researchesServ.getResearcherById(id); + if (researcher == null) return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + + Iterable>> stats = statServ.generateStats(researcher); + + if (stats == null) return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + + return new ResponseEntity<>(stats,HttpStatus.OK); + + } +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScientificPublications/ResearchRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScientificPublications/ResearchRepository.java index 8c100c6..9952212 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScientificPublications/ResearchRepository.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScientificPublications/ResearchRepository.java @@ -2,8 +2,14 @@ package ovh.herisson.Clyde.Repositories.ScientificPublications; import org.springframework.data.repository.CrudRepository; import ovh.herisson.Clyde.Tables.ScientificPublications.Research; +import ovh.herisson.Clyde.Tables.ScientificPublications.Researcher; + +import java.util.Map; public interface ResearchRepository extends CrudRepository { Research findById(long id); + + Iterable findByAuthor(Researcher author); + } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScientificPublications/StatsRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScientificPublications/StatsRepository.java new file mode 100644 index 0000000..c3eedd4 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/ScientificPublications/StatsRepository.java @@ -0,0 +1,27 @@ +package ovh.herisson.Clyde.Repositories.ScientificPublications; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import ovh.herisson.Clyde.Tables.ScientificPublications.Research; + +import java.util.Map; + +public interface StatsRepository extends CrudRepository { + + @Query("select new map(to_char(r.releaseDate, 'month') as label, sum(r.views) as y) from Research r group by to_char(r.releaseDate, 'month')") + Iterable> viewsByMonths(); + + + Iterable> viewsByYears(); + Iterable> viewsByTopics(); + Iterable> coAuthorByMonths(); + Iterable> coAuthorsByTopics(); + Iterable> languageByTopics(); + Iterable> languageByYears(); + Iterable> languageByMonths(); + Iterable> researchesByYears(); + Iterable> researchesByTopics(); + Iterable> researchesByMonth(); + + +} diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/ScientificPublications/StatisticsService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/ScientificPublications/StatisticsService.java new file mode 100644 index 0000000..d547943 --- /dev/null +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/ScientificPublications/StatisticsService.java @@ -0,0 +1,37 @@ +package ovh.herisson.Clyde.Services.ScientificPublications; + +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import ovh.herisson.Clyde.Repositories.ScientificPublications.ResearchRepository; +import ovh.herisson.Clyde.Repositories.ScientificPublications.ResearcherRepository; +import ovh.herisson.Clyde.Repositories.ScientificPublications.StatsRepository; +import ovh.herisson.Clyde.Tables.ScientificPublications.Research; +import ovh.herisson.Clyde.Tables.ScientificPublications.Researcher; + +import java.security.Key; +import java.util.*; + +@Service +@AllArgsConstructor +public class StatisticsService { + + + private ResearchRepository articleRepo; + private StatsRepository statsRepo; + + + public Iterable>> generateStats(Researcher researcher){ + + Iterable researches = articleRepo.findByAuthor(researcher); + + if (researches == null) return null; + + + ArrayList>> toReturn = new ArrayList<>(); + + toReturn.add(statsRepo.viewsByMonths()); + + + return toReturn; + } +} \ No newline at end of file diff --git a/backend/src/main/java/ovh/herisson/Clyde/Tables/ScientificPublications/Research.java b/backend/src/main/java/ovh/herisson/Clyde/Tables/ScientificPublications/Research.java index 3bf42a3..f2fa8ff 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Tables/ScientificPublications/Research.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Tables/ScientificPublications/Research.java @@ -32,7 +32,6 @@ public class Research { @JoinColumn(name ="Researcher") private Researcher author; - @CreationTimestamp @Column(nullable = false) private Date releaseDate;