diff --git a/src/main/java/com/onestep/server/ServerApplication.java b/src/main/java/com/onestep/server/ServerApplication.java index 228435e..a240291 100644 --- a/src/main/java/com/onestep/server/ServerApplication.java +++ b/src/main/java/com/onestep/server/ServerApplication.java @@ -2,7 +2,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; +@EnableScheduling @SpringBootApplication public class ServerApplication { static { diff --git a/src/main/java/com/onestep/server/controller/letter/LetterController.java b/src/main/java/com/onestep/server/controller/letter/LetterController.java index 1562e8c..c9bcbd2 100644 --- a/src/main/java/com/onestep/server/controller/letter/LetterController.java +++ b/src/main/java/com/onestep/server/controller/letter/LetterController.java @@ -1,12 +1,15 @@ package com.onestep.server.controller.letter; import com.onestep.server.entity.Letter; +import com.onestep.server.entity.letter.LetterListDTO; import com.onestep.server.service.letter.LetterService; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import java.util.List; +@Slf4j @RestController @RequiredArgsConstructor public class LetterController { @@ -19,15 +22,15 @@ public Letter writeLetter(@RequestBody Letter letter){ return letter; } -// //내가 작성한 편지 확인 -// @GetMapping(value = "/letter/byUser/{userId}") -// public List findLetterByWriterId(@PathVariable String userId){ -// return letterService.findLetterByWriterId(userId); -// } -// -// //가족 아이디로 편지 목록 확인 -// @GetMapping(value = "/letter/byFamily/{familyId}") -// public List findLetterByFamilyId(@PathVariable String familyId){ -// return letterService.findLetterByFamilyId(familyId); -// } + //내가 작성한 편지 확인 + @GetMapping(value = "/letter/byUser/{userId}") + public List findLetterByWriterId(@PathVariable String userId){ + return letterService.findLetterByWriterId(userId); + } + + //가족 아이디로 편지 목록 확인 + @GetMapping(value = "/letter/byFamily/{familyId}") + public List findLetterByFamilyId(@PathVariable String familyId){ + return letterService.findLetterByFamilyId(familyId); + } } diff --git a/src/main/java/com/onestep/server/controller/question/QuestionController.java b/src/main/java/com/onestep/server/controller/question/QuestionController.java new file mode 100644 index 0000000..6c23a77 --- /dev/null +++ b/src/main/java/com/onestep/server/controller/question/QuestionController.java @@ -0,0 +1,21 @@ +package com.onestep.server.controller.question; + +import com.onestep.server.entity.Question; +import com.onestep.server.service.question.QuestionService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + + +@RestController +@RequiredArgsConstructor +public class QuestionController { + private final QuestionService questionService; + + //질문 확인 + @GetMapping(value = "/question/{questionId}") + public Question showQuestion(@PathVariable Long questionId){ + return questionService.showQuestion(questionId); + } +} diff --git a/src/main/java/com/onestep/server/entity/letter/LetterListDTO.java b/src/main/java/com/onestep/server/entity/letter/LetterListDTO.java new file mode 100644 index 0000000..ceef5e0 --- /dev/null +++ b/src/main/java/com/onestep/server/entity/letter/LetterListDTO.java @@ -0,0 +1,21 @@ +package com.onestep.server.entity.letter; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.Date; + +@Setter +@Getter +@NoArgsConstructor +public class LetterListDTO { + + private Long letter_id; + private String writer_id; + private String family_id; + private String letter_title; + private String letter_txt; + private Date write_date; + +} diff --git a/src/main/java/com/onestep/server/repository/IFamilyRepository.java b/src/main/java/com/onestep/server/repository/IFamilyRepository.java new file mode 100644 index 0000000..d1b5b5c --- /dev/null +++ b/src/main/java/com/onestep/server/repository/IFamilyRepository.java @@ -0,0 +1,13 @@ +package com.onestep.server.repository; + +import com.onestep.server.entity.Family; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + + +public interface IFamilyRepository extends JpaRepository { + + @Query("UPDATE Family f SET f.question_id = f.question_id+1 , f.is_valid = false WHERE f.is_valid=true") + void changeQuestionAndState(); + +} diff --git a/src/main/java/com/onestep/server/repository/ILetterRepository.java b/src/main/java/com/onestep/server/repository/ILetterRepository.java index ce221a2..f249ac9 100644 --- a/src/main/java/com/onestep/server/repository/ILetterRepository.java +++ b/src/main/java/com/onestep/server/repository/ILetterRepository.java @@ -1,6 +1,8 @@ package com.onestep.server.repository; +import com.onestep.server.entity.Family; import com.onestep.server.entity.Letter; +import com.onestep.server.entity.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -9,11 +11,11 @@ public interface ILetterRepository extends JpaRepository { -// //특정 사람이 작성한 익명 편지 리스트 확인 -// @Query("SELECT l FROM Letter l WHERE l.user_id =:id") -// List findLetterByWriterId(@Param("id") String id); -// -// //가족 아이디로 편지 목록 확인 -// @Query("SELECT l, u FROM Letter l LEFT JOIN User u ON l.user_id = u.user_id WHERE u.fam_id =:fam_id") -// List findLetterByFamilyId(@Param("fam_id")String fam_id); + //특정 사람이 작성한 익명 편지 리스트 확인 + @Query("SELECT l FROM Letter l WHERE l.user =:user") + List findLetterByWriterId(@Param("user") User user); + + //가족 아이디로 편지 목록 확인 + @Query("SELECT l, u FROM Letter l LEFT JOIN User u ON l.user = u WHERE u.family =:family") + List findLetterByFamilyId(@Param("family") Family family); } diff --git a/src/main/java/com/onestep/server/repository/IUserRepository.java b/src/main/java/com/onestep/server/repository/IUserRepository.java index 44334a3..6ed1c85 100644 --- a/src/main/java/com/onestep/server/repository/IUserRepository.java +++ b/src/main/java/com/onestep/server/repository/IUserRepository.java @@ -1,6 +1,5 @@ package com.onestep.server.repository; -import com.onestep.server.entity.Letter; import com.onestep.server.entity.User; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/java/com/onestep/server/service/letter/LetterService.java b/src/main/java/com/onestep/server/service/letter/LetterService.java index 1ee4afc..6508b7f 100644 --- a/src/main/java/com/onestep/server/service/letter/LetterService.java +++ b/src/main/java/com/onestep/server/service/letter/LetterService.java @@ -1,33 +1,71 @@ package com.onestep.server.service.letter; +import com.onestep.server.entity.Family; import com.onestep.server.entity.Letter; +import com.onestep.server.entity.User; +import com.onestep.server.entity.letter.LetterListDTO; +import com.onestep.server.repository.IFamilyRepository; import com.onestep.server.repository.ILetterRepository; +import com.onestep.server.repository.IUserRepository; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; +import java.util.Optional; - +@Slf4j @Service @RequiredArgsConstructor @Transactional public class LetterService { private final ILetterRepository iLetterRepository; + private final IUserRepository iUserRepository; + private final IFamilyRepository iFamilyRepository; //익명편지 작성 public void writeLetter(Letter letter){ iLetterRepository.save(letter); } -// //내가 작성한 편지 확인 -// public List findLetterByWriterId(String userId){ -// return iLetterRepository.findLetterByWriterId(userId); -// } -// -// //가족 아이디로 편지 목록 확인 -// public List findLetterByFamilyId(String familyId){ -// //우리 가족이 작성한 편지 가져오기 -// return iLetterRepository.findLetterByFamilyId(familyId); -// } + //내가 작성한 편지 확인 + public List findLetterByWriterId(String userId){ + Optional optionalUser = iUserRepository.findById(userId); + User user = optionalUser.get(); + List originLetterList = iLetterRepository.findLetterByWriterId(user); + + return makeReturnLetterList(originLetterList); + } + + //가족 아이디로 편지 목록 확인 + public List findLetterByFamilyId(String familyId){ + Optional optionalFamily = iFamilyRepository.findById(familyId); + Family family = optionalFamily.get(); + + //우리 가족이 작성한 편지 가져오기 + List originLetterList = iLetterRepository.findLetterByFamilyId(family); + return makeReturnLetterList(originLetterList); + } + + public List makeReturnLetterList(List originLetterList){ + List letterList = new ArrayList<>(); + + for (Letter l : originLetterList) { + LetterListDTO letterListDTO = new LetterListDTO(); + User writer = l.getUser(); + + letterListDTO.setLetter_id(l.getLetter_id()); + letterListDTO.setWriter_id(writer.getUser_id()); + letterListDTO.setFamily_id(writer.getFamily().getFam_id()); + letterListDTO.setLetter_txt(l.getLetter_txt()); + letterListDTO.setLetter_title(l.getLetter_title()); + letterListDTO.setWrite_date(l.getWrite_date()); + + letterList.add(letterListDTO); + + } + return letterList; + } } diff --git a/src/main/java/com/onestep/server/service/question/QuestionService.java b/src/main/java/com/onestep/server/service/question/QuestionService.java new file mode 100644 index 0000000..8a78614 --- /dev/null +++ b/src/main/java/com/onestep/server/service/question/QuestionService.java @@ -0,0 +1,30 @@ +package com.onestep.server.service.question; + +import com.onestep.server.entity.Question; +import com.onestep.server.repository.IFamilyRepository; +import com.onestep.server.repository.IQuestionRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.Optional; + +@Slf4j +@Service +@RequiredArgsConstructor +@Transactional +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); + return optionalQuestion.get(); + } +}