From d1a23839ff9f1e6c860fb62672c25c9f5122adad Mon Sep 17 00:00:00 2001 From: mummhy0811 Date: Tue, 14 Nov 2023 19:12:26 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[#70]=20Fix:=20=EC=98=A4=EB=8A=98=EC=9D=98?= =?UTF-8?q?=20=EC=A7=88=EB=AC=B8=20=ED=99=95=EC=9D=B8=20api=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../question/QuestionController.java | 10 ++-- .../onestep/server/entity/GroupQuestion.java | 3 ++ .../com/onestep/server/entity/Question.java | 3 ++ .../entity/question/ShowQuestionDto.java | 19 +++++++ .../repository/IGroupQuestionRepository.java | 8 +++ .../repository/IQuestionRepository.java | 9 ++-- .../service/question/QuestionService.java | 50 ++++++++++++++++--- 7 files changed, 86 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/onestep/server/entity/question/ShowQuestionDto.java diff --git a/src/main/java/com/onestep/server/controller/question/QuestionController.java b/src/main/java/com/onestep/server/controller/question/QuestionController.java index d98d38f..a5257a2 100644 --- a/src/main/java/com/onestep/server/controller/question/QuestionController.java +++ b/src/main/java/com/onestep/server/controller/question/QuestionController.java @@ -1,7 +1,7 @@ package com.onestep.server.controller.question; -import com.onestep.server.entity.Question; import com.onestep.server.entity.question.AnsweredQuestionDto; +import com.onestep.server.entity.question.ShowQuestionDto; import com.onestep.server.service.question.QuestionService; import com.onestep.server.service.question.QuestionWithAnswerService; import lombok.RequiredArgsConstructor; @@ -18,10 +18,10 @@ public class QuestionController { private final QuestionService questionService; private final QuestionWithAnswerService questionWithAnswerService; - //질문 확인 - @GetMapping(value = "/question/{questionId}") - public Question showQuestion(@PathVariable Long questionId){ - return questionService.showQuestion(questionId); + //오늘의 질문 확인 + @GetMapping(value = "/question/{groupNumber}") + public ShowQuestionDto showQuestion(@PathVariable int groupNumber){ + return questionService.showQuestion( groupNumber); } //우리 가족이 대답한 질문 목록확인 diff --git a/src/main/java/com/onestep/server/entity/GroupQuestion.java b/src/main/java/com/onestep/server/entity/GroupQuestion.java index b510c40..1288547 100644 --- a/src/main/java/com/onestep/server/entity/GroupQuestion.java +++ b/src/main/java/com/onestep/server/entity/GroupQuestion.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.*; import org.hibernate.annotations.ColumnDefault; +import org.springframework.format.annotation.DateTimeFormat; import javax.persistence.*; import java.util.Date; @@ -20,6 +21,8 @@ public class GroupQuestion { @GeneratedValue(strategy = GenerationType.AUTO) private Long question_id; + @Temporal(TemporalType.DATE) + @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(shape= JsonFormat.Shape.STRING, pattern="yyyy-MM-dd", timezone="Asia/Seoul") @Column(nullable = false) private Date question_date; diff --git a/src/main/java/com/onestep/server/entity/Question.java b/src/main/java/com/onestep/server/entity/Question.java index 5e889c8..6a5c9c2 100644 --- a/src/main/java/com/onestep/server/entity/Question.java +++ b/src/main/java/com/onestep/server/entity/Question.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.*; import org.hibernate.annotations.ColumnDefault; +import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; @@ -21,6 +22,8 @@ public class Question { @GeneratedValue(strategy = GenerationType.AUTO) private Long question_id; + @Temporal(TemporalType.DATE) + @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(shape= JsonFormat.Shape.STRING, pattern="yyyy-MM-dd", timezone="Asia/Seoul") @Column(nullable = false) private Date question_date; diff --git a/src/main/java/com/onestep/server/entity/question/ShowQuestionDto.java b/src/main/java/com/onestep/server/entity/question/ShowQuestionDto.java new file mode 100644 index 0000000..8b44c2b --- /dev/null +++ b/src/main/java/com/onestep/server/entity/question/ShowQuestionDto.java @@ -0,0 +1,19 @@ +package com.onestep.server.entity.question; + +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class ShowQuestionDto { + + private Long question_id; + + private Date date; + + private int group_number; + + private String question_txt; +} diff --git a/src/main/java/com/onestep/server/repository/IGroupQuestionRepository.java b/src/main/java/com/onestep/server/repository/IGroupQuestionRepository.java index 7c281f0..bff389b 100644 --- a/src/main/java/com/onestep/server/repository/IGroupQuestionRepository.java +++ b/src/main/java/com/onestep/server/repository/IGroupQuestionRepository.java @@ -2,6 +2,14 @@ import com.onestep.server.entity.GroupQuestion; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.Date; +import java.util.Optional; public interface IGroupQuestionRepository extends JpaRepository { + //단일 질문 확인 + @Query("SELECT q FROM GroupQuestion q WHERE q.question_date =DATE(:date) and q.group_number =:groupNumber") + Optional findGroupQuestionByDate(@Param("date") Date date, @Param("groupNumber") int groupNumber); } diff --git a/src/main/java/com/onestep/server/repository/IQuestionRepository.java b/src/main/java/com/onestep/server/repository/IQuestionRepository.java index c55fe90..0b09cd0 100644 --- a/src/main/java/com/onestep/server/repository/IQuestionRepository.java +++ b/src/main/java/com/onestep/server/repository/IQuestionRepository.java @@ -5,11 +5,12 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -import java.util.List; +import java.util.Date; +import java.util.Optional; public interface IQuestionRepository extends JpaRepository { - //질문 목록 확인 - @Query("SELECT q FROM Question q WHERE q.question_id <=:questionId") - List findListById(@Param("questionId") Long questionId); + //단일 질문 확인 + @Query("SELECT q FROM Question q WHERE q.question_date =DATE(:date)") + Optional findQuestionByDate(@Param("date") Date date); } diff --git a/src/main/java/com/onestep/server/service/question/QuestionService.java b/src/main/java/com/onestep/server/service/question/QuestionService.java index 1393e4f..23ef1ba 100644 --- a/src/main/java/com/onestep/server/service/question/QuestionService.java +++ b/src/main/java/com/onestep/server/service/question/QuestionService.java @@ -1,7 +1,10 @@ package com.onestep.server.service.question; +import com.onestep.server.entity.GroupQuestion; import com.onestep.server.entity.Question; +import com.onestep.server.entity.question.ShowQuestionDto; import com.onestep.server.repository.IFamilyRepository; +import com.onestep.server.repository.IGroupQuestionRepository; import com.onestep.server.repository.IQuestionRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -9,6 +12,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.text.SimpleDateFormat; +import java.time.LocalTime; +import java.util.Date; import java.util.List; import java.util.Optional; @@ -18,15 +24,45 @@ @Transactional public class QuestionService { private final IQuestionRepository iQuestionRepository; - private final IFamilyRepository iFamilyRepository; + private final IGroupQuestionRepository iGroupQuestionRepository; + public ShowQuestionDto showQuestion(int groupNumber){ + + Date date = new Date(); + LocalTime now = LocalTime.now(); + + if(now.getHour()<6){ + Date dDate = new Date(); + date = new Date(dDate.getTime()+(1000*60*60*24*-1)); + } + + Optional optionalGroupQuestion = iGroupQuestionRepository.findGroupQuestionByDate(date, groupNumber); + + if(optionalGroupQuestion.isPresent()) { + GroupQuestion groupQuestion = optionalGroupQuestion.get(); + ShowQuestionDto dto = new ShowQuestionDto(); + dto.setQuestion_id(groupQuestion.getQuestion_id()); + dto.setQuestion_txt(groupQuestion.getQuestion_txt()); + dto.setDate(groupQuestion.getQuestion_date()); + dto.setGroup_number(groupQuestion.getGroup_number()); + + return dto; + } + + Optional optionalQuestion = iQuestionRepository.findQuestionByDate(date); + + if(optionalQuestion.isPresent()) { + Question question = optionalQuestion.get(); + + ShowQuestionDto dto = new ShowQuestionDto(); + dto.setQuestion_id(question.getQuestion_id()); + dto.setQuestion_txt(question.getQuestion_txt()); + dto.setDate(question.getQuestion_date()); + + return dto; + } - public Question showQuestion(Long questionId){ - Optional optionalQuestion = iQuestionRepository.findById(questionId); - return optionalQuestion.get(); - } - public List showQuestionList(Long questionId){ - return iQuestionRepository.findListById(questionId); + throw new IllegalStateException("잘못된 요청입니다."); } } From 4924ae9d37b3b40eeebc85077c6a563b511a53cd Mon Sep 17 00:00:00 2001 From: mummhy0811 Date: Tue, 14 Nov 2023 19:26:44 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[#29]=20Fix:=20=EB=8B=A8=EC=9D=BC=20?= =?UTF-8?q?=EC=A7=88=EB=AC=B8=20=EA=B0=80=EC=A0=B8=EC=98=A4=EB=8A=94=20api?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../question/QuestionController.java | 12 +++++-- .../entity/question/ShowQuestionDto.java | 2 -- .../service/question/QuestionService.java | 35 +++++++++++++++++-- 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/onestep/server/controller/question/QuestionController.java b/src/main/java/com/onestep/server/controller/question/QuestionController.java index a5257a2..b553e8e 100644 --- a/src/main/java/com/onestep/server/controller/question/QuestionController.java +++ b/src/main/java/com/onestep/server/controller/question/QuestionController.java @@ -19,9 +19,15 @@ public class QuestionController { private final QuestionWithAnswerService questionWithAnswerService; //오늘의 질문 확인 - @GetMapping(value = "/question/{groupNumber}") - public ShowQuestionDto showQuestion(@PathVariable int groupNumber){ - return questionService.showQuestion( groupNumber); + @GetMapping(value = "/question/daily/{groupNumber}") + public ShowQuestionDto showTodaysQuestion(@PathVariable int groupNumber){ + return questionService.showTodaysQuestion( groupNumber); + } + + //단일 질문 확인 + @GetMapping(value = "/question/{questionId}") + public ShowQuestionDto showQuestion(@PathVariable long questionId){ + return questionService.showQuestion( questionId); } //우리 가족이 대답한 질문 목록확인 diff --git a/src/main/java/com/onestep/server/entity/question/ShowQuestionDto.java b/src/main/java/com/onestep/server/entity/question/ShowQuestionDto.java index 8b44c2b..8b11b01 100644 --- a/src/main/java/com/onestep/server/entity/question/ShowQuestionDto.java +++ b/src/main/java/com/onestep/server/entity/question/ShowQuestionDto.java @@ -13,7 +13,5 @@ public class ShowQuestionDto { private Date date; - private int group_number; - private String question_txt; } diff --git a/src/main/java/com/onestep/server/service/question/QuestionService.java b/src/main/java/com/onestep/server/service/question/QuestionService.java index 23ef1ba..c5508f3 100644 --- a/src/main/java/com/onestep/server/service/question/QuestionService.java +++ b/src/main/java/com/onestep/server/service/question/QuestionService.java @@ -26,7 +26,7 @@ public class QuestionService { private final IQuestionRepository iQuestionRepository; private final IGroupQuestionRepository iGroupQuestionRepository; - public ShowQuestionDto showQuestion(int groupNumber){ + public ShowQuestionDto showTodaysQuestion(int groupNumber){ Date date = new Date(); LocalTime now = LocalTime.now(); @@ -44,7 +44,6 @@ public ShowQuestionDto showQuestion(int groupNumber){ dto.setQuestion_id(groupQuestion.getQuestion_id()); dto.setQuestion_txt(groupQuestion.getQuestion_txt()); dto.setDate(groupQuestion.getQuestion_date()); - dto.setGroup_number(groupQuestion.getGroup_number()); return dto; } @@ -63,6 +62,38 @@ public ShowQuestionDto showQuestion(int groupNumber){ } + throw new IllegalStateException("잘못된 요청입니다."); + } + + public ShowQuestionDto showQuestion(long questionId){ + + + Optional optionalGroupQuestion = iGroupQuestionRepository.findById(questionId); + + if(optionalGroupQuestion.isPresent()) { + GroupQuestion groupQuestion = optionalGroupQuestion.get(); + ShowQuestionDto dto = new ShowQuestionDto(); + dto.setQuestion_id(groupQuestion.getQuestion_id()); + dto.setQuestion_txt(groupQuestion.getQuestion_txt()); + dto.setDate(groupQuestion.getQuestion_date()); + + return dto; + } + + Optional optionalQuestion = iQuestionRepository.findById(questionId); + + if(optionalQuestion.isPresent()) { + Question question = optionalQuestion.get(); + + ShowQuestionDto dto = new ShowQuestionDto(); + dto.setQuestion_id(question.getQuestion_id()); + dto.setQuestion_txt(question.getQuestion_txt()); + dto.setDate(question.getQuestion_date()); + + return dto; + } + + throw new IllegalStateException("잘못된 요청입니다."); } } From a6c7b781fb2639c0048fcadfe70afcacbd2b6466 Mon Sep 17 00:00:00 2001 From: mummhy0811 Date: Tue, 14 Nov 2023 19:32:11 +0900 Subject: [PATCH 3/3] =?UTF-8?q?Refactor:=20questionService=20=EB=8F=99?= =?UTF-8?q?=EC=9D=BC=20=EC=BD=94=EB=93=9C=20=ED=95=A8=EC=88=98=EB=A1=9C=20?= =?UTF-8?q?=EC=9E=AC=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/question/QuestionService.java | 49 +++++++++---------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/onestep/server/service/question/QuestionService.java b/src/main/java/com/onestep/server/service/question/QuestionService.java index c5508f3..9820fa9 100644 --- a/src/main/java/com/onestep/server/service/question/QuestionService.java +++ b/src/main/java/com/onestep/server/service/question/QuestionService.java @@ -40,25 +40,15 @@ public ShowQuestionDto showTodaysQuestion(int groupNumber){ if(optionalGroupQuestion.isPresent()) { GroupQuestion groupQuestion = optionalGroupQuestion.get(); - ShowQuestionDto dto = new ShowQuestionDto(); - dto.setQuestion_id(groupQuestion.getQuestion_id()); - dto.setQuestion_txt(groupQuestion.getQuestion_txt()); - dto.setDate(groupQuestion.getQuestion_date()); - - return dto; + return makeDtoByGroupQuestion(groupQuestion); } Optional optionalQuestion = iQuestionRepository.findQuestionByDate(date); if(optionalQuestion.isPresent()) { - Question question = optionalQuestion.get(); - ShowQuestionDto dto = new ShowQuestionDto(); - dto.setQuestion_id(question.getQuestion_id()); - dto.setQuestion_txt(question.getQuestion_txt()); - dto.setDate(question.getQuestion_date()); - - return dto; + Question question = optionalQuestion.get(); + return makeDtoByQuestion(question); } @@ -72,28 +62,35 @@ public ShowQuestionDto showQuestion(long questionId){ if(optionalGroupQuestion.isPresent()) { GroupQuestion groupQuestion = optionalGroupQuestion.get(); - ShowQuestionDto dto = new ShowQuestionDto(); - dto.setQuestion_id(groupQuestion.getQuestion_id()); - dto.setQuestion_txt(groupQuestion.getQuestion_txt()); - dto.setDate(groupQuestion.getQuestion_date()); - - return dto; + return makeDtoByGroupQuestion(groupQuestion); } Optional optionalQuestion = iQuestionRepository.findById(questionId); if(optionalQuestion.isPresent()) { Question question = optionalQuestion.get(); - - ShowQuestionDto dto = new ShowQuestionDto(); - dto.setQuestion_id(question.getQuestion_id()); - dto.setQuestion_txt(question.getQuestion_txt()); - dto.setDate(question.getQuestion_date()); - - return dto; + return makeDtoByQuestion(question); } throw new IllegalStateException("잘못된 요청입니다."); } + + private ShowQuestionDto makeDtoByGroupQuestion(GroupQuestion groupQuestion){ + ShowQuestionDto dto = new ShowQuestionDto(); + dto.setQuestion_id(groupQuestion.getQuestion_id()); + dto.setQuestion_txt(groupQuestion.getQuestion_txt()); + dto.setDate(groupQuestion.getQuestion_date()); + return dto; + } + + private ShowQuestionDto makeDtoByQuestion(Question question){ + + ShowQuestionDto dto = new ShowQuestionDto(); + dto.setQuestion_id(question.getQuestion_id()); + dto.setQuestion_txt(question.getQuestion_txt()); + dto.setDate(question.getQuestion_date()); + + return dto; + } }