added addview and download PDF

This commit is contained in:
Bartha Maxime 2024-04-17 00:09:30 +02:00
parent 388c53e47b
commit 821377a72f
8 changed files with 63 additions and 39 deletions

View File

@ -225,4 +225,16 @@ public class ResearchController {
return new ResponseEntity<>(HttpStatus.OK);
}
///////
//views part
@PostMapping("/addView{url}")
public ResponseEntity<ResearchDTO> addView(@PathVariable String url){
Research research = researchesServ.getResearchByUrl(url);
if (research ==null) return new ResponseEntity<>(HttpStatus.NOT_FOUND);
return new ResponseEntity<>(ResearchDTO.construct(researchesServ.addView(research)), HttpStatus.OK);
}
}

View File

@ -12,4 +12,6 @@ public interface ResearchRepository extends CrudRepository<Research,Long> {
Iterable<Research> findByAuthor(Researcher author);
Research findByPdfLocation(String url);
}

View File

@ -11,7 +11,7 @@ public interface StatsRepository extends CrudRepository<Research,Long> {
@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<Map<String ,Integer>> viewsByMonths();
@Query("select new map(to_char(r.releaseDate,'year') as label, sum (r.views) as y) from Research r group by to_char(r.releaseDate,'year')")
@Query("select new map(to_char(r.releaseDate,'YYYY') as label, sum (r.views) as y) from Research r group by to_char(r.releaseDate,'YYYY')")
Iterable<Map<String ,Integer>> viewsByYears();
@ -19,16 +19,16 @@ public interface StatsRepository extends CrudRepository<Research,Long> {
Iterable<Map<String ,Integer>> viewsByTopics();
@Query("select new map(r.domain as label, r.language as y) from Research r group by r.domain")
@Query("select new map(r.domain as label, count(r.language) as y) from Research r group by r.domain")
Iterable<Map<String ,Integer>> languageByTopics();
@Query("select new map(to_char(r.releaseDate,'year') as label, r.language as y) from Research r group by to_char(r.releaseDate,'year')")
@Query("select new map(to_char(r.releaseDate,'YYYY') as label, count(r.language) as y) from Research r group by to_char(r.releaseDate,'YYYY')")
Iterable<Map<String ,Integer>> languageByYears();
@Query("select new map(to_char(r.releaseDate, 'month') as label, r.language as y) from Research r group by to_char(r.releaseDate, 'month')")
@Query("select new map(to_char(r.releaseDate, 'month') as label, count(r.language) as y) from Research r group by to_char(r.releaseDate, 'month')")
Iterable<Map<String ,Integer>> languageByMonths();
@Query("select new map(to_char(r.releaseDate,'year') as label, count(r) as y) from Research r group by to_char(r.releaseDate,'year')")
@Query("select new map(to_char(r.releaseDate,'YYYY') as label, count(r) as y) from Research r group by to_char(r.releaseDate,'YYYY')")
Iterable<Map<String ,Integer>> researchesByYears();
@Query("select new map(r.domain as label, count(r) as y) from Research r group by r.domain")

View File

@ -2,6 +2,7 @@ package ovh.herisson.Clyde.Services.ScientificPublications;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import ovh.herisson.Clyde.DTO.ScientificPublications.ResearchDTO;
import ovh.herisson.Clyde.Repositories.ScientificPublications.ResearchCoAuthorsRepository;
import ovh.herisson.Clyde.Repositories.ScientificPublications.ResearchRepository;
import ovh.herisson.Clyde.Repositories.ScientificPublications.ResearcherRepository;
@ -186,4 +187,13 @@ public class ResearchesService {
}
researcherRepo.save(researcher);
}
public Research getResearchByUrl(String url) {
return articleRepo.findByPdfLocation(url);
}
public Research addView(Research research) {
research.setViews(research.getViews()+1);
articleRepo.save(research);
}
}

View File

@ -40,7 +40,6 @@ public class StatisticsService {
toReturn.add(statsRepo.languageByYears());
toReturn.add(statsRepo.languageByMonths());
toReturn.add(statsRepo.languageByTopics());
return toReturn;
}
}

View File

@ -22,7 +22,7 @@ function format(date){
}
const emit = defineEmits(["modal-close"]);
const emit = defineEmits(["downloadPdf","downloadBibTex"]);
const target = ref(null)
onClickOutside(target, ()=>emit('modal-close'))
@ -43,11 +43,12 @@ onClickOutside(target, ()=>emit('modal-close'))
<li>PaperType : {{article.paperType}}</li>
<li>Domain : {{article.domain}}</li>
<li>Access : {{article.access}}</li>
</ul>
<div id="downloads" v-if="article.pdfLocation !== null">
<button @click.stop="emit('modal-close')">Download BibTex</button>
<button @click.stop="emit('modal-close')">Download Research</button>
<button @click.stop="emit('downloadBibTex')">Download BibTex</button>
<form method="get" :action=article.pdfLocation>
<button @click.stop="emit('downloadPdf', article)">Download Research</button>
</form>
</div>
</div>
</div>

View File

@ -9,7 +9,7 @@
import { ref, reactive } from "vue";
import FilterComponent from "@/Apps/ScientificPublications/FilterComponent.vue";
import ArticleComponent from "@/Apps/ScientificPublications/ResearchComponent.vue";
import {fetchResearcher, fetchResearches} from "@/rest/ScientificPublications/ResearcherProfile.js";
import {fetchResearcher, fetchResearches, fetchStats, addView} from "@/rest/ScientificPublications/ResearcherProfile.js";
const input = ref("");
const statsOf = ref("");
const statsBy = ref("");
@ -17,16 +17,15 @@ const isFilterOpened = ref(false);
const isResearchOpened = ref(false);
const articleToDisplay = ref(Object)
const filters = ref([]);
const researchList = ref(await fetchResearches(1));
let chart;
const researchList = ref(await fetchResearches(1));
//todo changer dynamiquement le 1 ici en fct de sur quel profil on est
const researcher = ref(await fetchResearcher(1));
const stats = ref(await fetchStats(1))
const props = defineProps({
researcher: ref(Object),
researcherId: ref(), //int
filters: ref([""]),
});
@ -53,7 +52,8 @@ const downloadBibTex = (research) => {
}
const downloadArticle = (research) => {
//todo
addView(research.url)
}
function downloadCoAuthors(){
@ -63,14 +63,6 @@ function downloadCoAuthors(){
}
const jsonMockViewsByYears= [
{label: "2004", y:4},
{label: "2005", y:99},
{label: "2007", y:555},
{label: "2009", y:22},
{label: "2011", y:1666},
]
function searchInList(list, searchInput) {
let retList = []
for (let i = 0; i < list.length; i++) {
@ -125,19 +117,21 @@ function update(){
fontColor: "white",
text: statsOf.value + " By "+ statsBy.value,
}
if (statsOf.value === "views" && statsBy.value === "years") {
options.data[0].dataPoints = jsonMockViewsByYears;
}
const index = (0 ?statsOf.value === "views": 3 ? statsOf.value === "researches":6) + (0?statsBy.value ==="years":1?statsBy.value==="months":2)
options.data[0].dataPoints = stats.value[index]
options.title.text = statsOf.value + " By "+ statsBy.value;
chart.render()
}
chart.render();
}
</script>
<template>
<div id="main">
<FilterComponent :isOpen="isFilterOpened" :allArticles="researchList" @modal-close="closeFilter" @submit="submitFilters()"></FilterComponent>
<ArticleComponent :article="articleToDisplay" :isOpen="isResearchOpened" @modal-close="closeResearch"></ArticleComponent>
<ArticleComponent :article="articleToDisplay" :isOpen="isResearchOpened" @modal-close="closeResearch" @downloadPdf="downloadArticle" @downloadBibTex="downloadBibTex"></ArticleComponent>
<div id="profilePicture">
<img src="/Clyde.png" />
</div>
@ -157,13 +151,13 @@ function update(){
<select @change="update()" id="stats-select" v-model="statsOf">
<option value="views">Views</option>
<option value="researches">Researches</option>
<option value="language">Languages</option>
<option value="languages">Languages</option>
</select>
</div>
<div class="surrounded">
Class by:
<select @change="update()" id="classed-select" v-model="statsBy">
<option selected="selected" value="years">Years</option>
<option value="years">Years</option>
<option value="months">Months</option>
<option value="topics">Topics</option>
</select>

View File

@ -8,4 +8,10 @@ export async function fetchResearches(id){
return restGet("/researches/" + id)
}
export async function fetchStats(id){
return restGet("/stats/" +id)
}
export async function addView(url){
return restPost("/addView/" +url)
}