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 667a7f9..d98d38f 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,9 @@ package com.onestep.server.controller.question; import com.onestep.server.entity.Question; +import com.onestep.server.entity.question.AnsweredQuestionDto; import com.onestep.server.service.question.QuestionService; +import com.onestep.server.service.question.QuestionWithAnswerService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -14,6 +16,7 @@ @RequiredArgsConstructor public class QuestionController { private final QuestionService questionService; + private final QuestionWithAnswerService questionWithAnswerService; //질문 확인 @GetMapping(value = "/question/{questionId}") @@ -21,9 +24,9 @@ public Question showQuestion(@PathVariable Long questionId){ return questionService.showQuestion(questionId); } - //질문 목록확인 - @GetMapping(value = "/question/list/{questionId}") - public List showQuestionList(@PathVariable Long questionId) { - return questionService.showQuestionList(questionId); + //우리 가족이 대답한 질문 목록확인 + @GetMapping(value = "/question/list/{familyId}") + public List showQuestionList(@PathVariable String familyId) { + return questionWithAnswerService.getAnsweredQuestionList(familyId); } } diff --git a/src/main/java/com/onestep/server/entity/question/AnsweredQuestionDto.java b/src/main/java/com/onestep/server/entity/question/AnsweredQuestionDto.java new file mode 100644 index 0000000..13f0806 --- /dev/null +++ b/src/main/java/com/onestep/server/entity/question/AnsweredQuestionDto.java @@ -0,0 +1,22 @@ +package com.onestep.server.entity.question; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +@NoArgsConstructor +public class AnsweredQuestionDto implements Comparable { + private Long question_id; + private Date question_date; + private String question_txt; + private Boolean is_group_question; + + @Override + public int compareTo(AnsweredQuestionDto a) { + return (int) (question_id-a.question_id); + } +} diff --git a/src/main/java/com/onestep/server/repository/IAnswerRepository.java b/src/main/java/com/onestep/server/repository/IAnswerRepository.java index 2d7d68a..5dca1df 100644 --- a/src/main/java/com/onestep/server/repository/IAnswerRepository.java +++ b/src/main/java/com/onestep/server/repository/IAnswerRepository.java @@ -2,6 +2,7 @@ import com.onestep.server.entity.Answer; import com.onestep.server.entity.Family; +import com.onestep.server.entity.GroupQuestion; import com.onestep.server.entity.Question; import io.lettuce.core.dynamic.annotation.Param; import org.springframework.data.jpa.repository.JpaRepository; @@ -11,7 +12,13 @@ public interface IAnswerRepository extends JpaRepository { - // 답변 읽기 + // 질문별 답변 읽기 @Query("select a from Answer a left join User u on a.user.user_id = u.user_id where a.question = :question and u.family =:family") - List findAnswerByFamId(@Param("question")Question question, @Param("family")Family family); + List findAnswerByQuestionIdAndFamId(@Param("question")Question question, @Param("family")Family family); + + @Query("select distinct a.groupQuestion from Answer a left join User u on a.user.user_id = u.user_id where u.family =:family") + List findAnsweredGroupQuestionsByFamId(@Param("family")Family family); + + @Query("select distinct a.question from Answer a left join User u on a.user.user_id = u.user_id where u.family =:family") + List findAnsweredQuestionsByFamId(@Param("family")Family family); } diff --git a/src/main/java/com/onestep/server/service/answer/AnswerService.java b/src/main/java/com/onestep/server/service/answer/AnswerService.java index bb1fe73..518d7f5 100644 --- a/src/main/java/com/onestep/server/service/answer/AnswerService.java +++ b/src/main/java/com/onestep/server/service/answer/AnswerService.java @@ -53,7 +53,7 @@ public List readAnswer(Long questionId,String familyId){ Question question =optionalQuestion.get(); Optional optionalFamily = iFamilyRepository.findById(familyId); Family family = optionalFamily.get(); - List answers = iAnswerRepository.findAnswerByFamId(question,family); + List answers = iAnswerRepository.findAnswerByQuestionIdAndFamId(question,family); return answers; } 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 60b0934..1393e4f 100644 --- a/src/main/java/com/onestep/server/service/question/QuestionService.java +++ b/src/main/java/com/onestep/server/service/question/QuestionService.java @@ -20,10 +20,6 @@ public class QuestionService { private final IQuestionRepository iQuestionRepository; private final IFamilyRepository iFamilyRepository; -// @Scheduled(cron = "0 0 6 * * *", zone = "Asia/Seoul") //매일 오전 6시마다 -// public void changeQuestion(){ -// iFamilyRepository.changeQuestionAndState(); -// } public Question showQuestion(Long questionId){ Optional optionalQuestion = iQuestionRepository.findById(questionId); diff --git a/src/main/java/com/onestep/server/service/question/QuestionWithAnswerService.java b/src/main/java/com/onestep/server/service/question/QuestionWithAnswerService.java new file mode 100644 index 0000000..c50a116 --- /dev/null +++ b/src/main/java/com/onestep/server/service/question/QuestionWithAnswerService.java @@ -0,0 +1,52 @@ +package com.onestep.server.service.question; + +import com.onestep.server.entity.Family; +import com.onestep.server.entity.GroupQuestion; +import com.onestep.server.entity.Question; +import com.onestep.server.entity.question.AnsweredQuestionDto; +import com.onestep.server.repository.IAnswerRepository; +import com.onestep.server.repository.IFamilyRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +@Transactional +public class QuestionWithAnswerService { + private final IAnswerRepository iAnswerRepository; + private final IFamilyRepository iFamilyRepository; + + public List getAnsweredQuestionList(String familyId){ + Family fam = iFamilyRepository.findById(familyId).get(); + List groupQuestions = iAnswerRepository.findAnsweredGroupQuestionsByFamId(fam); + List questions = iAnswerRepository.findAnsweredQuestionsByFamId(fam); + List answeredQuestionDtos = new ArrayList<>(); + questions.forEach(q -> { + AnsweredQuestionDto dto = new AnsweredQuestionDto(); + dto.setQuestion_id(q.getQuestion_id()); + dto.setQuestion_date(q.getQuestion_date()); + dto.setQuestion_txt(q.getQuestion_txt()); + dto.setIs_group_question(false); + answeredQuestionDtos.add(dto); + }); + groupQuestions.forEach(q -> { + AnsweredQuestionDto dto = new AnsweredQuestionDto(); + dto.setQuestion_id(q.getQuestion_id()); + dto.setQuestion_date(q.getQuestion_date()); + dto.setQuestion_txt(q.getQuestion_txt()); + dto.setIs_group_question(true); + answeredQuestionDtos.add(dto); + }); + + + Collections.sort(answeredQuestionDtos); + + return answeredQuestionDtos; + } +}