From 07ecff415069fb8a294c4f15ecaa9e7e43c85852 Mon Sep 17 00:00:00 2001 From: Julien WITTOUCK Date: Fri, 4 Aug 2023 11:58:20 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20:=20show=20previous=20quiz=20submis?= =?UTF-8?q?sion=20info?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitlab/classrooms/quiz/QuizScore.java | 11 ++++++++++- .../classrooms/quiz/QuizScoreService.java | 3 +++ .../classrooms/quiz/QuizScoreServiceImpl.java | 7 +++++++ .../gitlab/classrooms/ui/QuizController.java | 9 +++++++-- src/main/resources/templates/quiz.html | 17 +++++++++++++++++ 5 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/QuizScore.java b/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/QuizScore.java index 515f529..7f0516f 100644 --- a/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/QuizScore.java +++ b/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/QuizScore.java @@ -5,12 +5,21 @@ import jakarta.persistence.Id; import jakarta.persistence.IdClass; import java.io.Serializable; +import java.time.ZoneId; import java.time.ZonedDateTime; class QuizScoreId implements Serializable { String quizId; String studentId; + public QuizScoreId() { + } + + public QuizScoreId(String quizId, String studentId) { + this.quizId = quizId; + this.studentId = studentId; + } + public String getQuizId() { return quizId; } @@ -79,7 +88,7 @@ public class QuizScore { } public ZonedDateTime getSubmissionDate() { - return submissionDate; + return submissionDate.withZoneSameInstant(ZoneId.of("CET")); } public void setSubmissionDate(ZonedDateTime submissionDate) { diff --git a/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/QuizScoreService.java b/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/QuizScoreService.java index 9cf6ea8..ffa5db6 100644 --- a/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/QuizScoreService.java +++ b/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/QuizScoreService.java @@ -1,6 +1,9 @@ package fr.univ_lille.gitlab.classrooms.quiz; +import java.util.Optional; + public interface QuizScoreService { void registerScoreForStudent(Quiz quiz, String studentId); + Optional getPreviousQuizSubmission(String quizId, String studentId); } diff --git a/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/QuizScoreServiceImpl.java b/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/QuizScoreServiceImpl.java index fa9a5a6..d966815 100644 --- a/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/QuizScoreServiceImpl.java +++ b/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/QuizScoreServiceImpl.java @@ -2,6 +2,8 @@ package fr.univ_lille.gitlab.classrooms.quiz; import org.springframework.stereotype.Service; +import java.util.Optional; + @Service class QuizScoreServiceImpl implements QuizScoreService { @@ -21,4 +23,9 @@ class QuizScoreServiceImpl implements QuizScoreService { score.setMaxScore(quiz.getQuestions().size()); quizScoreRepository.save(score); } + + @Override + public Optional getPreviousQuizSubmission(String quizId, String studentId) { + return quizScoreRepository.findById(new QuizScoreId(quizId, studentId)); + } } diff --git a/src/main/java/fr/univ_lille/gitlab/classrooms/ui/QuizController.java b/src/main/java/fr/univ_lille/gitlab/classrooms/ui/QuizController.java index 7041419..c63c3b0 100644 --- a/src/main/java/fr/univ_lille/gitlab/classrooms/ui/QuizController.java +++ b/src/main/java/fr/univ_lille/gitlab/classrooms/ui/QuizController.java @@ -61,11 +61,16 @@ public class QuizController { } @GetMapping("/{quizId}") - public String showQuiz(Model model, @PathVariable String quizId) { + public String showQuiz(Model model, @PathVariable String quizId, Authentication authentication) { var quizEntity = this.quizRepository.findById(quizId).orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND)); var quiz = Quiz.fromMarkdown(quizEntity.getMarkdownContent(), quizId); model.addAttribute("quiz", quiz); + + var studentId = authentication.getName(); + var previousSubmission = this.quizScoreService.getPreviousQuizSubmission(quizId, studentId); + previousSubmission.ifPresent(submission -> model.addAttribute("previousSubmission", submission)); + return "quiz"; } @@ -89,7 +94,7 @@ public class QuizController { } var studentId = authentication.getName(); - quizScoreService.registerScoreForStudent(quiz, studentId); + this.quizScoreService.registerScoreForStudent(quiz, studentId); model.addAttribute("quiz", quiz); return "quiz-submitted-with-answers-correction"; diff --git a/src/main/resources/templates/quiz.html b/src/main/resources/templates/quiz.html index b49e44f..b9cc299 100644 --- a/src/main/resources/templates/quiz.html +++ b/src/main/resources/templates/quiz.html @@ -12,6 +12,23 @@ Quiz name +
+
+
+ +
+
+

Attention

+

+ Vous avez déjà répondu à ce quiz le date et obtenu un score de 5 / 10. +

+

Soumettre une nouvelle réponse à ce quiz écrasera la réponse précédente et remplacera le score que vous avez déjà obtenu.

+
+
+
+

Plusieurs réponses correctes par question sont possibles.

-- 2.51.2