From 8ae7457016445533d8724d3595188999d532cf32 Mon Sep 17 00:00:00 2001 From: Samy Avrillon Date: Mon, 9 Jun 2025 17:04:07 +0200 Subject: [PATCH] Fixed public quizz not appearing in quizz list --- compose.yaml | 2 +- .../misael/repository/QuizzRepository.java | 3 ++ .../bernard/misael/service/QuizzManager.java | 6 ++++ .../misael/service/QuizzManagerImpl.java | 30 +++++++++++++++++++ .../bernard/misael/web/AuthController.java | 6 ++-- .../misael/web/QuestionsController.java | 2 +- 6 files changed, 44 insertions(+), 5 deletions(-) diff --git a/compose.yaml b/compose.yaml index 5bf3011..f3b420e 100644 --- a/compose.yaml +++ b/compose.yaml @@ -9,7 +9,7 @@ services: - misanetwork misael: - image: 'misael:latest' + image: 'mysaa/misael:latest' build: . environment: - 'MISAEL_DATABASE=jdbc:postgresql://postgres:5432/misael' diff --git a/src/main/java/com/bernard/misael/repository/QuizzRepository.java b/src/main/java/com/bernard/misael/repository/QuizzRepository.java index 1066699..b724002 100644 --- a/src/main/java/com/bernard/misael/repository/QuizzRepository.java +++ b/src/main/java/com/bernard/misael/repository/QuizzRepository.java @@ -1,6 +1,7 @@ package com.bernard.misael.repository; import java.util.Optional; +import java.util.Set; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.lang.NonNull; @@ -11,4 +12,6 @@ public interface QuizzRepository extends JpaRepository { public @NonNull Optional findById(@NonNull Long id); + public @NonNull Set findByIsPublicTrue(); + } diff --git a/src/main/java/com/bernard/misael/service/QuizzManager.java b/src/main/java/com/bernard/misael/service/QuizzManager.java index 94028ea..9cbc276 100644 --- a/src/main/java/com/bernard/misael/service/QuizzManager.java +++ b/src/main/java/com/bernard/misael/service/QuizzManager.java @@ -1,5 +1,8 @@ package com.bernard.misael.service; +import java.util.List; + +import com.bernard.misael.model.Quizz; import com.bernard.misael.model.User; import com.fasterxml.jackson.databind.JsonNode; @@ -7,5 +10,8 @@ public interface QuizzManager { public JsonNode answer(User user, long quizzId,JsonNode data); public JsonNode next(User user, long quizzId); + + public boolean canAccessQuizz(User user, long quizzId); + public List accessibleQuizz(User user); } \ No newline at end of file diff --git a/src/main/java/com/bernard/misael/service/QuizzManagerImpl.java b/src/main/java/com/bernard/misael/service/QuizzManagerImpl.java index 8d5ede7..dd48f51 100644 --- a/src/main/java/com/bernard/misael/service/QuizzManagerImpl.java +++ b/src/main/java/com/bernard/misael/service/QuizzManagerImpl.java @@ -1,6 +1,10 @@ package com.bernard.misael.service; +import java.util.List; import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -22,6 +26,8 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.ObjectNode; +import jakarta.persistence.EntityNotFoundException; + @Service public class QuizzManagerImpl implements QuizzManager { @@ -168,4 +174,28 @@ public class QuizzManagerImpl implements QuizzManager { return out; } + @Override + public boolean canAccessQuizz(User user, long quizzId) { + try{ + Quizz quizz = qRepository.getReferenceById(quizzId); + return quizz.isPublic() || quizz.getOwner().equals(user); + } catch (EntityNotFoundException e) { + return false; + } + } + + @Override + public List accessibleQuizz(User user) { + Set ownQuizz = user.getMyQuizzs(); + Set publicQuizz = qRepository.findByIsPublicTrue(); + publicQuizz.removeAll(ownQuizz); + + return Stream.concat( + ownQuizz.stream() + .sorted((q1,q2) -> q1.getName().compareTo(q2.getName())), + publicQuizz.stream() + .sorted((q1,q2) -> q1.getName().compareTo(q2.getName())) + ).collect(Collectors.toList()); + } + } diff --git a/src/main/java/com/bernard/misael/web/AuthController.java b/src/main/java/com/bernard/misael/web/AuthController.java index 9bd0e29..6a02e2b 100644 --- a/src/main/java/com/bernard/misael/web/AuthController.java +++ b/src/main/java/com/bernard/misael/web/AuthController.java @@ -73,9 +73,9 @@ public class AuthController { @PostMapping("/adduser") @Secured("ADD_USERS") public String registration(@Valid @ModelAttribute("newuser") UserDto userDto, - BindingResult result, - Model model, - Principal p){ + BindingResult result, + Model model, + Principal p){ User existingUser = userService.findUserByName(userDto.getName()); if(existingUser != null){ diff --git a/src/main/java/com/bernard/misael/web/QuestionsController.java b/src/main/java/com/bernard/misael/web/QuestionsController.java index 4510fc9..e3a4822 100644 --- a/src/main/java/com/bernard/misael/web/QuestionsController.java +++ b/src/main/java/com/bernard/misael/web/QuestionsController.java @@ -46,7 +46,7 @@ public class QuestionsController { if (p!=null) u = ur.findByName(p.getName()); if(u!=null) { - model.addAttribute("quizz",u.getMyQuizzs()); + model.addAttribute("quizz",qm.accessibleQuizz(u)); } return "quizz.html"; }