From ea9fcb5fc98f3f4ef028c3f4c8957a057e571757 Mon Sep 17 00:00:00 2001 From: Vlad Date: Thu, 21 Mar 2024 15:21:30 +0300 Subject: [PATCH 01/22] Create entyties files for hibernate, link they create DAO class --- .gitignore | 1 + .idea/dbnavigator.xml | 115 +++++++++++++++++- .idea/workspace.xml | 41 ++++++- pom.xml | 41 +++++-- src/main/java/org/example/BotUpdate.java | 24 ++-- src/main/java/org/example/DAO/QuizDAO.java | 10 ++ src/main/java/org/example/QuizRepository.java | 4 +- src/main/java/org/example/model/Question.java | 78 +++++++++++- .../org/example/model/QuestionOption.java | 72 +++++++++++ src/main/java/org/example/model/Quiz.java | 51 ++++++++ src/main/java/org/example/model/UserInfo.java | 50 ++++++++ src/main/resources/hibernate.config.xml | 16 +++ 12 files changed, 467 insertions(+), 36 deletions(-) create mode 100644 src/main/java/org/example/DAO/QuizDAO.java create mode 100644 src/main/java/org/example/model/QuestionOption.java create mode 100644 src/main/java/org/example/model/Quiz.java create mode 100644 src/main/resources/hibernate.config.xml diff --git a/.gitignore b/.gitignore index 40e55bd..095214e 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ target/ *.iml *.ipr src/main/resources/config.properties +src/main/resources/hibernate.config.xml ### Eclipse ### .apt_generated diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml index 257f3c7..e18b01a 100644 --- a/.idea/dbnavigator.xml +++ b/.idea/dbnavigator.xml @@ -1,10 +1,120 @@ + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
@@ -353,9 +463,6 @@ - - - diff --git a/.idea/workspace.xml b/.idea/workspace.xml index e2addae..341a56f 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,10 +4,18 @@
- + + + + + + + - - + + + +
\ No newline at end of file diff --git a/src/main/java/org/example/BotUpdate.java b/src/main/java/org/example/BotUpdate.java index 5dab633..d517440 100644 --- a/src/main/java/org/example/BotUpdate.java +++ b/src/main/java/org/example/BotUpdate.java @@ -12,6 +12,7 @@ import com.pengrad.telegrambot.request.EditMessageText; import com.pengrad.telegrambot.request.SendMessage; import org.example.model.Question; +import org.example.model.QuestionOption; import org.example.model.UserInfo; import org.example.model.UserQuizSession; @@ -119,12 +120,12 @@ private void sendChoiceQuiz(Long chatId) { private void sendQuestion(Long chatId) { UserQuizSession userQuizSession = users.get(chatId).getUserQuizSession(); Question question = userQuizSession.getNextQuestion(); - String[] questionOptions = question.getOptions(); - Keyboard inlineKeyboardMarkup = buildInlineKeyboard(questionOptions.length); + List questionOptions = question.getQuestionOption(); + Keyboard inlineKeyboardMarkup = buildInlineKeyboard(questionOptions.size()); StringBuilder questionTextMessage = new StringBuilder(String.format("❓ Question: %d\n%s\n", userQuizSession.getQuestionCounter(), question.getQuestion())); - for (int i = 0; i < questionOptions.length; i++) { - questionTextMessage.append(String.format("\n%d. %s", i + 1, questionOptions[i])); + for (int i = 0; i < questionOptions.size(); i++) { + questionTextMessage.append(String.format("\n%d. %s", i + 1, questionOptions.get(i).getOptionText())); } SendMessage questionMessage = new SendMessage(chatId, questionTextMessage.toString()); @@ -272,9 +273,18 @@ private void chooseQuiz(String callbackData, Long chatId) { private String getAnswerText(UserQuizSession userQuizSession, int userAnswerNum) { Question question = userQuizSession.getCurrentQuestion(); - int questionAnswerNum = question.getAnswer(); - String userAnswerText = question.getOptions()[userAnswerNum]; - String quizAnswerOption = question.getOptions()[questionAnswerNum]; + List questionOptionList = question.getQuestionOption(); + String quizAnswerOption = null; + int questionAnswerNum = 0; + for (int i = 0; i < questionOptionList.size(); i++) { + QuestionOption questionOption = questionOptionList.get(i); + if(questionOption.isAnswer()){ + questionAnswerNum = i; + quizAnswerOption = questionOption.getOptionText(); + break; + } + } + String userAnswerText = question.getAnswerDescription(); String quizAnswerDescription = question.getAnswerDescription(); String answerMessageText; if (questionAnswerNum == userAnswerNum) { diff --git a/src/main/java/org/example/DAO/QuizDAO.java b/src/main/java/org/example/DAO/QuizDAO.java new file mode 100644 index 0000000..1cb3adc --- /dev/null +++ b/src/main/java/org/example/DAO/QuizDAO.java @@ -0,0 +1,10 @@ +package org.example.DAO; + +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; + +public class QuizDAO { + private SessionFactory sessionFactory = new Configuration() + .configure("hibernate.config.xml") + .buildSessionFactory();; +} diff --git a/src/main/java/org/example/QuizRepository.java b/src/main/java/org/example/QuizRepository.java index 0378605..0532239 100644 --- a/src/main/java/org/example/QuizRepository.java +++ b/src/main/java/org/example/QuizRepository.java @@ -4,6 +4,7 @@ import com.google.gson.GsonBuilder; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.example.DAO.QuizDAO; import org.example.model.Question; import java.io.BufferedReader; @@ -18,6 +19,7 @@ import java.util.Map; public class QuizRepository { + private QuizDAO quizDAO = new QuizDAO(); private final Map quizesTopics = new HashMap<>(); private static final Logger logger = LogManager.getLogger(QuizRepository.class); public QuizRepository(String jsonPath) { @@ -49,4 +51,4 @@ public String[] getAllTopicNames() { return quizesTopics.keySet().toArray(new String[]{}); } -} +} \ No newline at end of file diff --git a/src/main/java/org/example/model/Question.java b/src/main/java/org/example/model/Question.java index 1688785..dcb2c15 100644 --- a/src/main/java/org/example/model/Question.java +++ b/src/main/java/org/example/model/Question.java @@ -1,25 +1,91 @@ package org.example.model; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; + +import java.util.List; + +@Entity +@Table(name = "questions") public class Question { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private int id; + + @Column(name = "question_text") private String question; - private String[] options; - private int answer; + + @ManyToOne + @JoinColumn(name = "quiz_id") + private Quiz quiz; + + @Column(name = "answer_description") private String answerDescription; - public String[] getOptions() { - return options; + @OneToMany + @JoinColumn(name = "option") + private List questionOption; + + public Question() { + } + + public Question(int id, String question, Quiz quiz, String answerDescription, List questionOption) { + this.id = id; + this.question = question; + this.quiz = quiz; + this.answerDescription = answerDescription; + this.questionOption = questionOption; + } + + + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; } public String getQuestion() { return question; } - public int getAnswer() { - return answer; + public void setQuestion(String question) { + this.question = question; + } + + public Quiz getQuiz() { + return quiz; + } + + public void setQuiz(Quiz quiz) { + this.quiz = quiz; } public String getAnswerDescription() { return answerDescription; } + public void setAnswerDescription(String answerDescription) { + this.answerDescription = answerDescription; + } + + public List getQuestionOption() { + return questionOption; + } + + public void setQuestionOption(List questionOption) { + this.questionOption = questionOption; + } + + } diff --git a/src/main/java/org/example/model/QuestionOption.java b/src/main/java/org/example/model/QuestionOption.java new file mode 100644 index 0000000..b9590bc --- /dev/null +++ b/src/main/java/org/example/model/QuestionOption.java @@ -0,0 +1,72 @@ +package org.example.model; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name = "question_options") +public class QuestionOption { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private int id; + + @Column(name = "is_answer") + private boolean isAnswer; + + @Column(name = "option_text") + private String optionText; + + @JoinColumn(name = "question_id") + @ManyToOne + private Question question; + + public QuestionOption() { + + } + + public QuestionOption(int id, boolean isAnswer, String optionText, Question question) { + this.id = id; + this.isAnswer = isAnswer; + this.optionText = optionText; + this.question = question; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public boolean isAnswer() { + return isAnswer; + } + + public void setAnswer(boolean answer) { + isAnswer = answer; + } + + public String getOptionText() { + return optionText; + } + + public void setOptionText(String optionText) { + this.optionText = optionText; + } + + public Question getQuestion() { + return question; + } + + public void setQuestion(Question question) { + this.question = question; + } +} diff --git a/src/main/java/org/example/model/Quiz.java b/src/main/java/org/example/model/Quiz.java new file mode 100644 index 0000000..3740332 --- /dev/null +++ b/src/main/java/org/example/model/Quiz.java @@ -0,0 +1,51 @@ +package org.example.model; + + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; + +import java.util.List; + +@Entity +@Table(name = "quizes") +public class Quiz { + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Id + @Column(name = "id") + private int id; + @Column(name = "topic_name") + private String topicName; + @OneToMany + @JoinColumn(name = "questions") + List questionList; + + public Quiz() { + } + + public Quiz(int id, String topicName) { + this.id = id; + this.topicName = topicName; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTopicName() { + return topicName; + } + + public void setTopicName(String topicName) { + this.topicName = topicName; + } +} diff --git a/src/main/java/org/example/model/UserInfo.java b/src/main/java/org/example/model/UserInfo.java index 85efcbf..8960e6a 100644 --- a/src/main/java/org/example/model/UserInfo.java +++ b/src/main/java/org/example/model/UserInfo.java @@ -3,13 +3,39 @@ package org.example.model; import com.pengrad.telegrambot.model.Message; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +@Entity +@Table(name = "user_info") public class UserInfo { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + @Column(name = "user_id") + private Long userId; + @Column(name = "user_name") + private String userName; + private boolean choiceQuiz = false; private UserQuizSession userQuizSession = null; private String currentTopicName; private Message lastBotMessage = null; + public UserInfo() { + } + + public UserInfo(int id, Long userId, String userName) { + this.id = id; + this.userId = userId; + this.userName = userName; + } + public String getCurrentTopicName() { return currentTopicName; } @@ -41,4 +67,28 @@ public Message getLastBotMessage() { public void setLastBotMessage(Message lastBotMessage) { this.lastBotMessage = lastBotMessage; } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } } diff --git a/src/main/resources/hibernate.config.xml b/src/main/resources/hibernate.config.xml new file mode 100644 index 0000000..bf36ab1 --- /dev/null +++ b/src/main/resources/hibernate.config.xml @@ -0,0 +1,16 @@ + + + + + org.hibernate.dialect.MySQLDialect + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306/?user=root/bot + root + 1111 + true + update + net.sf.ehcache.hibernate.SingletonEhCacheProvider + true + + From 9e1ed7612dd5100696b107ccded8c31e585c8206 Mon Sep 17 00:00:00 2001 From: Vlad Date: Thu, 21 Mar 2024 22:09:13 +0300 Subject: [PATCH 02/22] link DB with classes except UserInfo create 2 methods in QuizDAO for get data from DB by id and all Quiz repair hibernate --- .idea/workspace.xml | 14 ++++---- pom.xml | 8 +++-- src/main/java/org/example/BotUpdate.java | 4 +-- src/main/java/org/example/DAO/QuizDAO.java | 34 +++++++++++++++++-- src/main/java/org/example/Main.java | 6 ++++ src/main/java/org/example/QuizRepository.java | 1 - src/main/java/org/example/model/Question.java | 31 +++++------------ .../org/example/model/QuestionOption.java | 20 +++-------- src/main/java/org/example/model/Quiz.java | 17 +++++++--- src/main/java/org/example/model/UserInfo.java | 6 +++- src/main/resources/hibernate.config.xml | 9 ++--- 11 files changed, 89 insertions(+), 61 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 341a56f..c3d6119 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,17 +5,17 @@ - - - - - - + + + + + +