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..b553e8e 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,16 @@ public class QuestionController { private final QuestionService questionService; private final QuestionWithAnswerService questionWithAnswerService; - //질문 확인 + //오늘의 질문 확인 + @GetMapping(value = "/question/daily/{groupNumber}") + public ShowQuestionDto showTodaysQuestion(@PathVariable int groupNumber){ + return questionService.showTodaysQuestion( groupNumber); + } + + //단일 질문 확인 @GetMapping(value = "/question/{questionId}") - public Question showQuestion(@PathVariable Long questionId){ - return questionService.showQuestion(questionId); + public ShowQuestionDto showQuestion(@PathVariable long questionId){ + return questionService.showQuestion( questionId); } //우리 가족이 대답한 질문 목록확인 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..8b11b01 --- /dev/null +++ b/src/main/java/com/onestep/server/entity/question/ShowQuestionDto.java @@ -0,0 +1,17 @@ +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 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..9820fa9 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,73 @@ @Transactional public class QuestionService { private final IQuestionRepository iQuestionRepository; - private final IFamilyRepository iFamilyRepository; + private final IGroupQuestionRepository iGroupQuestionRepository; + public ShowQuestionDto showTodaysQuestion(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(); + return makeDtoByGroupQuestion(groupQuestion); + } + + Optional optionalQuestion = iQuestionRepository.findQuestionByDate(date); + + if(optionalQuestion.isPresent()) { + + Question question = optionalQuestion.get(); + return makeDtoByQuestion(question); + } + + + throw new IllegalStateException("잘못된 요청입니다."); + } + + public ShowQuestionDto showQuestion(long questionId){ + + + Optional optionalGroupQuestion = iGroupQuestionRepository.findById(questionId); + + if(optionalGroupQuestion.isPresent()) { + GroupQuestion groupQuestion = optionalGroupQuestion.get(); + return makeDtoByGroupQuestion(groupQuestion); + } - public Question showQuestion(Long questionId){ Optional optionalQuestion = iQuestionRepository.findById(questionId); - return optionalQuestion.get(); + + if(optionalQuestion.isPresent()) { + Question question = optionalQuestion.get(); + 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; } - public List showQuestionList(Long questionId){ - return iQuestionRepository.findListById(questionId); + 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; } }