diff --git a/src/main/java/com/onestep/server/controller/quiz/QuizController.java b/src/main/java/com/onestep/server/controller/quiz/QuizController.java index cfe9961..8083743 100644 --- a/src/main/java/com/onestep/server/controller/quiz/QuizController.java +++ b/src/main/java/com/onestep/server/controller/quiz/QuizController.java @@ -1,12 +1,11 @@ package com.onestep.server.controller.quiz; +import com.onestep.server.entity.quiz.QuizAnswerRequestDTO; import com.onestep.server.entity.quiz.QuizRequestDTO; import com.onestep.server.service.quiz.QuizService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @RestController @RequiredArgsConstructor @@ -18,11 +17,21 @@ public class QuizController { //퀴즈 생성 @PostMapping(value = "/quiz/create") public String writeQuiz(@RequestBody QuizRequestDTO quizRequestDTO){ - quizService.writeQuiz(quizRequestDTO); + quizService.writeQuiz(quizRequestDTO); return quizRequestDTO.getUser_id()+"님이 작성한 퀴즈가 등록되었습니다."; } + //퀴즈 등록 가능상태 확인 + @GetMapping(value = "/quiz/canQuiz/{family_id}") + public Boolean canQuiz(@PathVariable String family_id){ + return quizService.canQuiz(family_id); + } + //퀴즈 답변 - // @PostMapping(value = "/quiz/answer") - // public String answerQuiz(@RequestBody ) + //0 오답, 1 정답 + @PostMapping(value = "/quiz/answer") + public String answerQuiz(@RequestBody QuizAnswerRequestDTO quizAnswerRequestDTO){ + quizService.answerQuiz(quizAnswerRequestDTO); + return quizAnswerRequestDTO.getUser_id()+"님이 작성한 퀴즈 답변이 등록되었습니다."; + } } diff --git a/src/main/java/com/onestep/server/repository/IQuizAnswerRepository.java b/src/main/java/com/onestep/server/repository/IQuizAnswerRepository.java index e50853f..26dac84 100644 --- a/src/main/java/com/onestep/server/repository/IQuizAnswerRepository.java +++ b/src/main/java/com/onestep/server/repository/IQuizAnswerRepository.java @@ -2,6 +2,13 @@ import com.onestep.server.entity.QuizAnswer; 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 IQuizAnswerRepository extends JpaRepository { + @Query("SELECT q FROM QuizAnswer q WHERE q.quiz.quiz_id =:quiz_id and q.user.user_id =:user_id") + Optional findQuizByUser(@Param("quiz_id") Long quiz_id, @Param("user_id") String user_id); } diff --git a/src/main/java/com/onestep/server/repository/IQuizRepository.java b/src/main/java/com/onestep/server/repository/IQuizRepository.java index 2e85941..1e7dc7a 100644 --- a/src/main/java/com/onestep/server/repository/IQuizRepository.java +++ b/src/main/java/com/onestep/server/repository/IQuizRepository.java @@ -1,8 +1,19 @@ package com.onestep.server.repository; +import com.onestep.server.entity.Family; +import com.onestep.server.entity.Letter; import com.onestep.server.entity.Quiz; 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.List; +import java.util.Optional; public interface IQuizRepository extends JpaRepository { + // 날짜로 퀴즈 등록 여부 찾기 + @Query("SELECT q FROM Quiz q WHERE q.user.family.fam_id =:family_id and q.write_date =:date") + Optional findQuizByWriteDate(@Param("family_id") String family_id,@Param("date") Date date); } diff --git a/src/main/java/com/onestep/server/service/quiz/QuizService.java b/src/main/java/com/onestep/server/service/quiz/QuizService.java index b3ea581..8148d19 100644 --- a/src/main/java/com/onestep/server/service/quiz/QuizService.java +++ b/src/main/java/com/onestep/server/service/quiz/QuizService.java @@ -2,8 +2,10 @@ import com.onestep.server.entity.Family; import com.onestep.server.entity.Quiz; +import com.onestep.server.entity.QuizAnswer; import com.onestep.server.entity.User; import com.onestep.server.entity.quiz.QuizAnswerDTO; +import com.onestep.server.entity.quiz.QuizAnswerRequestDTO; import com.onestep.server.entity.quiz.QuizDTO; import com.onestep.server.entity.quiz.QuizRequestDTO; import com.onestep.server.repository.IQuizAnswerRepository; @@ -27,6 +29,7 @@ public class QuizService { private final IQuizRepository iQuizRepository; private final IQuizAnswerRepository iQuizAnswerRepository; private final IUserRepository iUserRepository; + public Quiz writeQuiz(QuizRequestDTO quizRequestDTO){ Optional optionalUser = iUserRepository.findById(quizRequestDTO.getUser_id()); User user = optionalUser.get(); @@ -65,4 +68,44 @@ public Quiz writeQuiz(QuizRequestDTO quizRequestDTO){ return addQuiz; } + + //퀴즈 생성 가능 여부 + public Boolean canQuiz(String family_id){ + Boolean canQuiz = true; + Date writeDate = new Date(); + LocalTime now = LocalTime.now(); + + if(now.getHour()<6){ + Date dDate = new Date(); + writeDate = new Date(dDate.getTime()+(1000*60*60*24*-1)); + } + Optional optionalQuiz = iQuizRepository.findQuizByWriteDate(family_id,writeDate); + // 같은 날에 퀴즈를 생성 했을 시 + if(optionalQuiz.isPresent()){ + canQuiz = false; + } + + return canQuiz; + } + + //퀴즈 답변 + public QuizAnswer answerQuiz(QuizAnswerRequestDTO quizAnswerRequestDTO){ + Optional optionalQuizAnswer = iQuizAnswerRepository.findQuizByUser(quizAnswerRequestDTO.getQuiz_id(),quizAnswerRequestDTO.getUser_id()); + Optional quiz = iQuizRepository.findById(quizAnswerRequestDTO.getQuiz_id()); + Integer answer = quiz.get().getQuiz_ans(); + + QuizAnswer quizAnswer = new QuizAnswer(); + quizAnswer.setQuizAnswer_id(optionalQuizAnswer.get().getQuizAnswer_id()); + quizAnswer.setQuiz(optionalQuizAnswer.get().getQuiz()); + quizAnswer.setUser(optionalQuizAnswer.get().getUser()); + quizAnswer.setQuiz_ans(quizAnswerRequestDTO.getQuiz_ans()); + + if(quizAnswerRequestDTO.getQuiz_ans().equals(answer)){ + quizAnswer.setQuiz_state(1); + }else{ + quizAnswer.setQuiz_state(0); + } + + return iQuizAnswerRepository.save(quizAnswer); + } }