1
0
forked from PGL/Clyde

added Co Author

This commit is contained in:
2024-04-20 19:07:27 +02:00
parent 041fe7f95d
commit 54d19eb888
14 changed files with 186 additions and 251 deletions

View File

@ -2,47 +2,33 @@ 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;
import ovh.herisson.Clyde.Tables.Role;
import ovh.herisson.Clyde.Tables.ScientificPublications.*;
import ovh.herisson.Clyde.Tables.User;
import java.util.ArrayList;
import java.util.Date;
import java.util.Map;
import java.util.*;
@Service
@AllArgsConstructor
@SuppressWarnings("unchecked")
public class ResearchesService {
private final ResearcherRepository researcherRepo;
private final ResearchCoAuthorsRepository researchCoAuthorsRepo;
private final ResearchRepository articleRepo;
// Researchers Part
public Researcher getResearcherByUser(User user){
return researcherRepo.findByUser(user);
}
public boolean isCoAuthor(Research research, Researcher researcher){
Iterable<Researcher> coAuthors = researchCoAuthorsRepo.findResearchCoAuthors(research);
for (Researcher coAuthor : coAuthors){
if (researcher == coAuthor){
return true;
}
}
return false;
}
// researches Part
public Research getResearchById(long id) {
return articleRepo.findById(id);
}
public Research getResearchByUrl(String url) {
return articleRepo.findByPdfLocation(url);
}
public Iterable<Research> getResearchesByAuthor(long authorId){
Researcher researcher = researcherRepo.findById(authorId);
if (researcher == null) return null;
@ -50,29 +36,6 @@ public class ResearchesService {
return researcherRepo.findAllByAuthorId(researcher);
}
public boolean hasNoAccessTo(Research research, User user){
if (research.getAccess() == Access.OpenSource) return false; // if the access is open source even non-users can see it
if (user == null) return true; // else you need at least to be a user
if (user.getRole() == Role.Admin) return false;
if (research.getAccess() == Access.Restricted &&
user.getRole() == Role.Secretary ||
user.getRole() == Role.Teacher || user.getRole() == Role.InscriptionService)
return false; // if the access is restricted only the staff member (above) can access the research
Researcher researcher = getResearcherByUser(user);
if (researcher==null)
return true;
return (research.getAccess() != Access.Private || research.getAuthor() != researcher) &&
(research.getAccess() != Access.Private || !isCoAuthor(research, researcher));
// if the researcher is the author or one of the co-authors of the research will return false
}
public Research saveResearch(Research research) {
return articleRepo.save(research);
}
@ -98,6 +61,18 @@ public class ResearchesService {
case "access":
research.setAccess(Access.valueOf((String) entry.getValue()));
break;
case "coAuthors":
Set<Researcher> set = new HashSet<>();
for (int id : (List<Integer>) entry.getValue()) {
Researcher r = researcherRepo.findById(id);
if (r != null){
set.add(r);
}
}
research.setCoAuthors(set);
break;
}
}
articleRepo.save(research);
@ -107,6 +82,12 @@ public class ResearchesService {
articleRepo.delete(research);
}
// Researchers Part
public Researcher getResearcherByUser(User user){
return researcherRepo.findByUser(user);
}
public Iterable<Research> getAllResearches() {
return articleRepo.findAll();
}
@ -129,41 +110,6 @@ public class ResearchesService {
researcherRepo.delete(researcher);
}
public boolean saveCoAuthors(Iterable<Long> researchersId, Research research) {
if (researchersId == null) return false;
ArrayList<Researcher> toAdd = new ArrayList<>();
for (long researcherId : researchersId){
Researcher researcher= researcherRepo.findById(researcherId);
if (research== null){
return false;
}
if (!toAdd.contains(researcher))
{
toAdd.add(researcher);
}
}
for (Researcher researcher: toAdd){
researchCoAuthorsRepo.save(new ResearchCoAuthors(researcher,research));
}
return true;
}
public Iterable<Researcher> getCoAuthors(Research research) {
return researchCoAuthorsRepo.findResearchCoAuthors(research);
}
public boolean deleteCoAuthor(Research research,Researcher coAuthor) {
ResearchCoAuthors result = researchCoAuthorsRepo.findResearchCoAuthors(research,coAuthor);
if (result ==null)
return false;
researchCoAuthorsRepo.delete(result);
return true;
}
public void modifyResearcherData(Researcher researcher, Map<String, Object> updates) {
for (Map.Entry<String, Object> entry : updates.entrySet()){
@ -185,12 +131,69 @@ public class ResearchesService {
researcherRepo.save(researcher);
}
public Research getResearchByUrl(String url) {
return articleRepo.findByPdfLocation(url);
//Co Author part
public boolean saveCoAuthors(Iterable<Long> researchersId, Research research) {
if (researchersId == null) return false;
ArrayList<Researcher> toAdd = new ArrayList<>();
for (long researcherId : researchersId){
Researcher researcher= researcherRepo.findById(researcherId);
if (researcher== null){
return false;
}
if (!toAdd.contains(researcher))
{
toAdd.add(researcher);
}
}
research.getCoAuthors().addAll(toAdd);
articleRepo.save(research);
return true;
}
public boolean deleteCoAuthor(Research research,Researcher coAuthor) {
if (!research.getCoAuthors().contains(coAuthor))
return false;
research.getCoAuthors().remove(coAuthor);
articleRepo.save(research);
return true;
}
// Other stuff
public Research addView(Research research) {
research.setViews(research.getViews()+1);
return articleRepo.save(research);
}
public boolean hasNoAccessTo(Research research, User user){
if (research.getAccess() == Access.OpenSource) return false; // if the access is open source even non-users can see it
if (user == null) return true; // else you need at least to be a user
if (user.getRole() == Role.Admin) return false;
Researcher researcher = getResearcherByUser(user);
if (researcher !=null ){
if (research.getAuthor().getId() == researcher.getId())
return false;
for (Researcher coAuthor: research.getCoAuthors()){
if (coAuthor.getId() == researcher.getId())
return false;
}
}
if (research.getAccess() == Access.Restricted && (
user.getRole() == Role.Secretary ||
user.getRole() == Role.Teacher || user.getRole() == Role.InscriptionService))
return false; // if the access is restricted only the staff member (above) can access the research
return true;
// if the researcher is the author or one of the co-authors of the research will return false
}
}