diff --git a/src/main/java/com/bernard/misael/model/Quizz.java b/src/main/java/com/bernard/misael/model/Quizz.java index 874a94e..d2ed260 100644 --- a/src/main/java/com/bernard/misael/model/Quizz.java +++ b/src/main/java/com/bernard/misael/model/Quizz.java @@ -29,10 +29,14 @@ public class Quizz { @JoinColumn(name="owner") private User owner; - @Column(nullable=false) + @Column(nullable=false) @ColumnDefault("false") private boolean isPublic; + @Column(nullable=false) + @ColumnDefault("false") + private boolean isComplete; + @Column(nullable=false) @ColumnDefault("0") private int questionCount; diff --git a/src/main/java/com/bernard/misael/repository/QuizzRepository.java b/src/main/java/com/bernard/misael/repository/QuizzRepository.java index b724002..d03f686 100644 --- a/src/main/java/com/bernard/misael/repository/QuizzRepository.java +++ b/src/main/java/com/bernard/misael/repository/QuizzRepository.java @@ -7,11 +7,14 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.lang.NonNull; import com.bernard.misael.model.Quizz; +import com.bernard.misael.model.User; public interface QuizzRepository extends JpaRepository { public @NonNull Optional findById(@NonNull Long id); - public @NonNull Set findByIsPublicTrue(); + public @NonNull Set findByIsPublicTrueAndIsCompleteTrue(); + public @NonNull Set findByOwnerAndIsCompleteTrue(@NonNull User owner); + public @NonNull Set findByOwnerAndIsCompleteFalse(@NonNull User owner); } diff --git a/src/main/java/com/bernard/misael/service/QuizzManager.java b/src/main/java/com/bernard/misael/service/QuizzManager.java index a9702bf..696d43e 100644 --- a/src/main/java/com/bernard/misael/service/QuizzManager.java +++ b/src/main/java/com/bernard/misael/service/QuizzManager.java @@ -13,7 +13,8 @@ public interface QuizzManager { public JsonNode next(User user, long quizzId); public boolean canAccessQuizz(User user, long quizzId); - public List accessibleQuizz(User user); + public List editableQuizz(User user); + public List answerableQuizz(User user); public boolean canEditQuizz(User user, long quizzId); diff --git a/src/main/java/com/bernard/misael/service/QuizzManagerImpl.java b/src/main/java/com/bernard/misael/service/QuizzManagerImpl.java index 9de6634..096a788 100644 --- a/src/main/java/com/bernard/misael/service/QuizzManagerImpl.java +++ b/src/main/java/com/bernard/misael/service/QuizzManagerImpl.java @@ -194,9 +194,9 @@ public class QuizzManagerImpl implements QuizzManager { } @Override - public List accessibleQuizz(User user) { - Set ownQuizz = user.getMyQuizzs(); - Set publicQuizz = qRepository.findByIsPublicTrue(); + public List answerableQuizz(User user) { + Set ownQuizz = qRepository.findByOwnerAndIsCompleteTrue(user); + Set publicQuizz = qRepository.findByIsPublicTrueAndIsCompleteTrue(); publicQuizz.removeAll(ownQuizz); return Stream.concat( @@ -207,6 +207,14 @@ public class QuizzManagerImpl implements QuizzManager { ).collect(Collectors.toList()); } + @Override + public List editableQuizz(User user) { + Set ownQuizz = qRepository.findByOwnerAndIsCompleteFalse(user); + return ownQuizz.stream() + .sorted((q1,q2) -> q1.getName().compareTo(q2.getName())) + .collect(Collectors.toList()); + } + Logger logger = LoggerFactory.getLogger(QuestionsController.class); @Override public boolean canEditQuizz(User user, long quizzId) { @@ -228,6 +236,8 @@ public class QuizzManagerImpl implements QuizzManager { Optional oquizz = qRepository.findById(quizzId); if(!oquizz.isPresent()) return Optional.of(errorNode("Could not find quizz with id "+quizzId)); + if(oquizz.get().isComplete()) + return Optional.of(errorNode("Quizz is complete, cannot edit, answers might have already been cast")); return Optional.empty(); } diff --git a/src/main/java/com/bernard/misael/web/QuestionsController.java b/src/main/java/com/bernard/misael/web/QuestionsController.java index 1de47cb..51d7987 100644 --- a/src/main/java/com/bernard/misael/web/QuestionsController.java +++ b/src/main/java/com/bernard/misael/web/QuestionsController.java @@ -54,7 +54,8 @@ public class QuestionsController { if (p!=null) u = ur.findByName(p.getName()); if(u!=null) { - model.addAttribute("quizz",qm.accessibleQuizz(u)); + model.addAttribute("answerableQuizz",qm.answerableQuizz(u)); + model.addAttribute("editableQuizz",qm.editableQuizz(u)); } return "quizz.html"; } diff --git a/src/main/resources/db/migration/V4__added_complete_flag_quizz.sql b/src/main/resources/db/migration/V4__added_complete_flag_quizz.sql new file mode 100644 index 0000000..46bf4de --- /dev/null +++ b/src/main/resources/db/migration/V4__added_complete_flag_quizz.sql @@ -0,0 +1 @@ +alter table quizz add column "is_complete" BOOLEAN NOT NULL DEFAULT FALSE; \ No newline at end of file diff --git a/src/main/resources/templates/quizz.html b/src/main/resources/templates/quizz.html index d9c89b9..c01916c 100644 --- a/src/main/resources/templates/quizz.html +++ b/src/main/resources/templates/quizz.html @@ -7,9 +7,15 @@
+

Quizz à répondre

    -
  • Aucun quizz de disponible malheureusement :(
  • -
  • Quizz
  • +
  • Aucun quizz de disponible malheureusement :(
  • +
  • Quizz
  • +
+

Quizz à éditer

+
    +
  • Aucun quizz de disponible malheureusement :(
  • +
  • Quizz