Download json

This commit is contained in:
Samy Avrillon 2025-06-17 01:12:14 +02:00
parent 6e5c41431a
commit 655971a000
Signed by: Mysaa
GPG Key ID: 0220AC4A3D6A328B
3 changed files with 59 additions and 1 deletions

View File

@ -33,6 +33,7 @@ public interface QuizzManager {
public JsonNode setQuestionType(User user, long quizzId, long questionId, QTypes type);
public JsonNode getQuizzFormData(User user, long quizzFormId);
public JsonNode getAllFormsData(User u, long id);
public JsonNode getQuizzFormAdvancments(User user, long quizzId);
public Quizz duplicateQuizz(User user, long quizzId);

View File

@ -498,6 +498,49 @@ public class QuizzManagerImpl implements QuizzManager {
return out;
}
@Override
public JsonNode getAllFormsData(User u, long quizzId) {
Optional<Quizz> oq = canViewQuizzFormsOfQuizz(u, quizzId);
if(oq.isEmpty())
return errorNode("Could not access the quizzform"); //TODO more precise error node
Quizz quizz = oq.get();
ObjectNode out = JsonNodeFactory.instance.objectNode();
out.set("id",JsonNodeFactory.instance.numberNode(quizz.getId()));
out.set("name",JsonNodeFactory.instance.textNode(quizz.getName()));
ArrayNode questionNode = JsonNodeFactory.instance.arrayNode(quizz.getQuestionCount());
List<Question> questions = quizz.getQuestions().stream().sorted((p,q) -> Integer.valueOf(p.getIndex()).compareTo(q.getIndex())).toList();
for(int i=0;i<questions.size();i++) {
ObjectNode qNode = JsonNodeFactory.instance.objectNode();
qNode.set("id", JsonNodeFactory.instance.numberNode(questions.get(i).getId()));
qNode.set("type", JsonNodeFactory.instance.textNode(questions.get(i).getType().name()));
qNode.set("value",questions.get(i).getValue());
questionNode.add(qNode);
}
out.set("questions", questionNode);
ObjectNode qfzNodes = JsonNodeFactory.instance.objectNode();
for(QuizzForm qf : qfRepository.findByQuizz(quizz)) {
ObjectNode qfNode = JsonNodeFactory.instance.objectNode();
qfNode.set("id", JsonNodeFactory.instance.numberNode(qf.getId()));
qfNode.set("currentQuestion", JsonNodeFactory.instance.numberNode(qf.getCurrentQuestion()));
qfNode.set("answerStep", JsonNodeFactory.instance.numberNode(qf.getAnswerStep()));
qfNode.set("done", JsonNodeFactory.instance.booleanNode(qf.isDone()));
List<Answer> answers = answerRepository.findByFormAndQuestionIn(qf, questions);
ArrayNode answersNode = JsonNodeFactory.instance.arrayNode();
for(int i=0;i<answers.size();i++) {
answersNode.add(answers.get(i).getValue());
}
qfNode.set("answers", answersNode);
qfzNodes.set(qf.getUser().getName(), qfNode);
}
out.set("forms", qfzNodes);
out.set("success", JsonNodeFactory.instance.booleanNode(true));
return out;
}
@Override
public JsonNode getQuizzFormAdvancments(User user, long quizzId) {
Optional<Quizz> oq = canViewQuizzFormsOfQuizz(user, quizzId);

View File

@ -135,6 +135,20 @@ public class QuestionsController {
return new ResponseEntity<>(out, HttpStatus.OK);
}
/*
* API get the forms for a specific quizz
*/
@GetMapping("/getallformsdata/{id}")
public Object getAllFormsData(@PathVariable("id") long id, Principal p) {
User u = null;
if (p!=null)
u = ur.findByName(p.getName());
if(u==null)
return "redirect:/login?restricted";
JsonNode out = qm.getAllFormsData(u, id);
return new ResponseEntity<>(out, HttpStatus.OK);
}
/*
* API get the form
*/