Here is my user_answer entity:
package com.example.demo.entities;
import org.junit.ClassRule;
import javax.persistence.*;
import javax.persistence.criteria.CriteriaBuilder;
@Entity
@Table(name = "user_answer")
public class UserAnswer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long device_id;
private Integer quiz_id;
private String questionNum;
private String answerNum;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
// 0, 1, 2, 3, 4 corresponding to A, B, C, D, E
public Long getDevice_id() {
return device_id;
}
public void setDevice_id(Long device_id) {
this.device_id = device_id;
}
public long getQuiz_id() {
return quiz_id;
}
public void setQuiz_id(Integer quiz_id) {
this.quiz_id = quiz_id;
}
public String getQuestionNum() {
return questionNum;
}
public void setQuestionNum(String questionNum) {
this.questionNum = questionNum;
}
public String getAnswerNum() {
return answerNum;
}
public void setAnswerNum(String answerNum) {
this.answerNum = answerNum;
}
}
Here is where I did saving:
@RequestMapping("/test")
public String viewTest(@ModelAttribute UserAnswer answer, @AuthenticationPrincipal CustomUserDetails userDetails,
HttpSession session, @RequestParam(name = "q", required = false, defaultValue = "0") String qNum,
@RequestParam(name = "id", required = false, defaultValue = "1") String quizID, Model model,
HttpServletRequest req) {
int index = Integer.parseInt(qNum) + 1;
JSONObject question = (JSONObject) HttpController.GetQuestion(quizID, qNum);
if (question != null) {
model.addAttribute("problem", question.get("problem"));
model.addAttribute("answer0", question.get("answer0"));
model.addAttribute("answer1", question.get("answer1"));
model.addAttribute("answer2", question.get("answer2"));
model.addAttribute("answer3", question.get("answer3"));
model.addAttribute("url", "/test?id=" + quizID + "&q=" + (index));
model.addAttribute("qNum", "" + index);
UserAnswer userAnswer = (UserAnswer) session.getAttribute("user_answer");
if (userAnswer != null) {
String previousQuesiton = userAnswer.getQuestionNum();
System.out.println("Previous question: " + previousQuesiton);
String previousAnswer = userAnswer.getAnswerNum();
if (previousAnswer == null) {
previousAnswer = "";
}
System.out.println("Previous answer: " + previousAnswer);
String newQuestion = qNum;
String newAnswer = answer.getAnswerNum();
newQuestion = previousQuesiton + newQuestion;
System.out.println("New question: " + newQuestion);
newAnswer = previousAnswer + newAnswer;
System.out.println("New answer: " + newAnswer);
answer.setAnswerNum(newAnswer);
answer.setQuiz_id(Integer.parseInt(quizID));
answer.setQuestionNum(newQuestion);
req.getSession().setAttribute("user_answer",answer);
return "test.html";
} else
answer.setQuestionNum(qNum);
req.getSession().setAttribute("user_answer",answer);
return "test.html";
} else {
// Cookie[] cookies = req.getCookies();
// UserAnswer userAnswer = (UserAnswer) req.getSession().getAttribute("user_answer");
// String previousAnswer = userAnswer.getAnswerNum();
// String newAnswer = previousAnswer + answer.getAnswerNum();
// userAnswer.setAnswerNum(newAnswer);
if (userDetails != null) {
UserAnswer userAnswer = (UserAnswer) req.getSession().getAttribute("user_answer");
String previousAnswer = userAnswer.getAnswerNum();
String newAnswer = previousAnswer + answer.getAnswerNum();
userAnswer.setAnswerNum(newAnswer);
System.out.println("user login");
userAnswer.setDevice_id(userDetails.getDeviceID());
userAnswerRepository.save(userAnswer);
} else{
UserAnswer not_login_userAnswer = (UserAnswer) req.getSession().getAttribute("user_answer");
String previousAnswer = not_login_userAnswer.getAnswerNum();
String newAnswer = previousAnswer + answer.getAnswerNum();
not_login_userAnswer.setAnswerNum(newAnswer);
Long deviceID = getCookie(req);
not_login_userAnswer.setDevice_id(deviceID);
userAnswerRepository.save(not_login_userAnswer);
}
req.getSession().removeAttribute("user_answer");
System.out.println("Question not found");
// go to results page
return "ThankForTakingTest.html";
}
}
Here is my propertie file:
spring.jpa.hibernate.ddl-auto= update
The implementation that I want is:
- When I finish the quiz, I want to save all the answers and questions number inside user_answer database with a device id for guest user. Moreover, inside user_answer table it also have their own id too, the reason why I did this, because I want to make sure that when new user come to do my quiz they will have their new device_id and when they finish with all their question, all their answers will save in user_answer.