From bbe43cef956a4a2b8be7562ef63ca5b59f6c07b7 Mon Sep 17 00:00:00 2001 From: Samy Avrillon Date: Sun, 15 Jun 2025 14:41:04 +0200 Subject: [PATCH] Added duplicate quizz url --- .../bernard/misael/service/QuizzManager.java | 1 + .../misael/service/QuizzManagerImpl.java | 30 +++++++++++++++++++ .../misael/web/QuestionsController.java | 16 ++++++++++ 3 files changed, 47 insertions(+) diff --git a/src/main/java/com/bernard/misael/service/QuizzManager.java b/src/main/java/com/bernard/misael/service/QuizzManager.java index 2e87bbb..e9cae20 100644 --- a/src/main/java/com/bernard/misael/service/QuizzManager.java +++ b/src/main/java/com/bernard/misael/service/QuizzManager.java @@ -35,4 +35,5 @@ public interface QuizzManager { public JsonNode getQuizzFormData(User user, long quizzFormId); public JsonNode getQuizzFormAdvancments(User user, long quizzId); + public Quizz duplicateQuizz(User user, long quizzId); } \ 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 db3eeaf..030fa8f 100644 --- a/src/main/java/com/bernard/misael/service/QuizzManagerImpl.java +++ b/src/main/java/com/bernard/misael/service/QuizzManagerImpl.java @@ -521,6 +521,36 @@ public class QuizzManagerImpl implements QuizzManager { return out; } + @Override + public Quizz duplicateQuizz(User u, long quizzId) { + if (!canEditQuizz(u, quizzId)) + return null; + Optional oq = qRepository.findById(quizzId); + // CHECKED BEFORE if (oq.isEmpty()) return null; + Quizz q = oq.get(); + + + Quizz nq = new Quizz(); + nq.setName(q.getName() + "("+ Integer.toHexString((int)(Math.random()*0xFFFFFFF)) +")"); + nq.setOwner(q.getOwner()); + nq.setQuestionCount(q.getQuestionCount()); + nq.setPublic(q.isPublic()); + nq.setComplete(q.isComplete()); + + nq = qRepository.save(nq); + + // We duplicate questions + for (Question qu : q.getQuestions()) { + Question nqu = new Question(); + nqu.setIndex(qu.getIndex()); + nqu.setType(qu.getType()); + nqu.setValue(qu.getValue()); + nqu.setQuizz(nq); + questionRepository.save(nqu); + } + return nq; + } + } diff --git a/src/main/java/com/bernard/misael/web/QuestionsController.java b/src/main/java/com/bernard/misael/web/QuestionsController.java index 61791cb..89e8687 100644 --- a/src/main/java/com/bernard/misael/web/QuestionsController.java +++ b/src/main/java/com/bernard/misael/web/QuestionsController.java @@ -150,6 +150,22 @@ public class QuestionsController { return new ResponseEntity<>(out, HttpStatus.OK); } + /* + * API get the form + */ + @GetMapping("/duplicate-quizz/{id}") + public Object duplicateQuizz(@PathVariable("id") long id, Principal p) { + User u = null; + if (p!=null) + u = ur.findByName(p.getName()); + if(u==null) + return "redirect:/login?restricted"; + Quizz q = qm.duplicateQuizz(u, id); + if(q == null) + return new ResponseEntity<>(HttpStatus.UNAUTHORIZED); + return new ResponseEntity<>(HttpStatus.OK); + } + @GetMapping("/form/{q}") public String formpage(@PathVariable("q") long quizzId, Principal p, Model m) { if (p==null)