Added new complete flag for quizz

This commit is contained in:
Samy Avrillon 2025-06-13 13:33:41 +02:00
parent c6fa363cd9
commit 225b5df774
Signed by: Mysaa
GPG Key ID: 0220AC4A3D6A328B
7 changed files with 35 additions and 9 deletions

View File

@ -33,6 +33,10 @@ public class Quizz {
@ColumnDefault("false")
private boolean isPublic;
@Column(nullable=false)
@ColumnDefault("false")
private boolean isComplete;
@Column(nullable=false)
@ColumnDefault("0")
private int questionCount;

View File

@ -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<Quizz,Long> {
public @NonNull Optional<Quizz> findById(@NonNull Long id);
public @NonNull Set<Quizz> findByIsPublicTrue();
public @NonNull Set<Quizz> findByIsPublicTrueAndIsCompleteTrue();
public @NonNull Set<Quizz> findByOwnerAndIsCompleteTrue(@NonNull User owner);
public @NonNull Set<Quizz> findByOwnerAndIsCompleteFalse(@NonNull User owner);
}

View File

@ -13,7 +13,8 @@ public interface QuizzManager {
public JsonNode next(User user, long quizzId);
public boolean canAccessQuizz(User user, long quizzId);
public List<Quizz> accessibleQuizz(User user);
public List<Quizz> editableQuizz(User user);
public List<Quizz> answerableQuizz(User user);
public boolean canEditQuizz(User user, long quizzId);

View File

@ -194,9 +194,9 @@ public class QuizzManagerImpl implements QuizzManager {
}
@Override
public List<Quizz> accessibleQuizz(User user) {
Set<Quizz> ownQuizz = user.getMyQuizzs();
Set<Quizz> publicQuizz = qRepository.findByIsPublicTrue();
public List<Quizz> answerableQuizz(User user) {
Set<Quizz> ownQuizz = qRepository.findByOwnerAndIsCompleteTrue(user);
Set<Quizz> publicQuizz = qRepository.findByIsPublicTrueAndIsCompleteTrue();
publicQuizz.removeAll(ownQuizz);
return Stream.concat(
@ -207,6 +207,14 @@ public class QuizzManagerImpl implements QuizzManager {
).collect(Collectors.toList());
}
@Override
public List<Quizz> editableQuizz(User user) {
Set<Quizz> 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<Quizz> 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();
}

View File

@ -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";
}

View File

@ -0,0 +1 @@
alter table quizz add column "is_complete" BOOLEAN NOT NULL DEFAULT FALSE;

View File

@ -7,9 +7,15 @@
<body>
<div th:replace="~{header}"/>
<main>
<h3>Quizz à répondre</h3>
<ul>
<li th:if="${#lists.isEmpty(quizz)}">Aucun quizz de disponible malheureusement :(</li>
<li th:each="q : ${quizz}"><a th:href="@{/questions/form/{id}(id=${q.id})}">Quizz <span th:text="${q.name}"/></a></li>
<li th:if="${#lists.isEmpty(answerableQuizz)}">Aucun quizz de disponible malheureusement :(</li>
<li th:each="q : ${answerableQuizz}"><a th:href="@{/questions/form/{id}(id=${q.id})}">Quizz <span th:text="${q.name}"/></a></li>
</ul>
<h3>Quizz à éditer</h3>
<ul>
<li th:if="${#lists.isEmpty(editableQuizz)}">Aucun quizz de disponible malheureusement :(</li>
<li th:each="q : ${editableQuizz}"><a th:href="@{/questions/quizz-edit/{id}(id=${q.id})}">Quizz <span th:text="${q.name}"/></a></li>
</ul>
</main>
</body>