package enseirb.myinpulse.service; import enseirb.myinpulse.model.Administrator; import enseirb.myinpulse.model.Entrepreneur; import enseirb.myinpulse.model.Project; import enseirb.myinpulse.model.User; import enseirb.myinpulse.service.database.AdministratorService; import enseirb.myinpulse.service.database.EntrepreneurService; import enseirb.myinpulse.service.database.ProjectService; import enseirb.myinpulse.service.database.UserService; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.server.ResponseStatusException; import java.util.Objects; @Service public class UtilsService { protected static final Logger logger = LogManager.getLogger(); private final UserService userService; private final ProjectService projectService; private final EntrepreneurService entrepreneurService; private final AdministratorService administratorService; @Autowired UtilsService( ProjectService projectService, UserService userService, EntrepreneurService entrepreneurService, AdministratorService administratorService) { this.userService = userService; this.projectService = projectService; this.entrepreneurService = entrepreneurService; this.administratorService = administratorService; } // TODO: test? public Boolean isAllowedToCheckProject(String mail, long projectId) { if (isAnAdmin(mail)) { return true; } User user = this.userService.getUserByEmail(mail); Entrepreneur entrepreneur = this.entrepreneurService.getEntrepreneurById(user.getIdUser()); if (entrepreneur == null) { logger.debug("testing access with an unknown Entrepreneur"); return false; } if (entrepreneur.getProjectParticipation() == null) { logger.debug("testing access with an user with no project participation"); return false; } Project project = this.projectService.getProjectById(projectId); // We compare the ID instead of the project themselves return Objects.equals( entrepreneur.getProjectParticipation().getIdProject(), project.getIdProject()); } // TODO: test Boolean isAnAdmin(String mail) { try { long userId = this.userService.getUserByEmail(mail).getIdUser(); Administrator a = this.administratorService.getAdministratorById(userId); return true; } catch (ResponseStatusException e) { logger.info(e); return false; } } }