From 476d5870fba3c078387021d1bfcaddf9d944221f Mon Sep 17 00:00:00 2001 From: SeHwan Bong Date: Sat, 25 Nov 2023 01:52:10 +0900 Subject: [PATCH] =?UTF-8?q?[FEATURE]=20=EC=9C=A0=EC=A0=80=EC=9D=98=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=BC=EB=A6=AC=20=EC=A7=88=EB=AC=B8=EC=9D=84=20?= =?UTF-8?q?=EC=9B=94=EB=B3=84=EB=A1=9C=20=EC=A1=B0=ED=9A=8C=ED=95=A0=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?(#110)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat : 유저가 남긴 데일리 답변의 개수를 모든 카테고리별로 조회하도록 변경 #107 * spotless Apply #107 * feat : 유저가 남긴 데일리 답변을 월별로 조회하도록 변경 #107 * edit : 어노테이션 삭제 #107 * spotless Apply #107 --- .DS_Store | Bin 6148 -> 6148 bytes .gitignore | 4 +- .../api/user/controller/UserController.java | 11 ++---- .../model/dto/vo/MyDailyQuestionAnswerVo.java | 8 +++- .../service/RetrieveMyDailyAnswerUseCase.java | 12 +++--- .../question/adaptor/AnswerAdaptor.java | 12 ++++-- .../dto/model/DailyQuestionAnswerVo.java | 2 + .../repository/AnswerCustomRepository.java | 5 +-- .../AnswerCustomRepositoryImpl.java | 37 +++++++++--------- 9 files changed, 48 insertions(+), 43 deletions(-) diff --git a/.DS_Store b/.DS_Store index ad041948630ca44fb68f63c5403afc7460d59d25..37120ddb9efc781f38d37237baa0933c8e864d8b 100644 GIT binary patch delta 110 zcmZoMXfc=|#>AjHu~68Uk%57MnZc2vfFU!bI5{UNKR*X30s%}=8l(n@1sEXmn+2J_ qv20dg-psU_or9kPXb@23JM(0I5k*dr(gcvU$tFC?n`1;)FarQ&Y!r_G delta 358 zcmZoMXfc=|#>B)qF;R?_gMop8V`8F+EEA9c0w9`^fkA+QL6;$z!IdG1A&kLwW8!kg zdXNk^LkNQ>gBwF6vMfVTQh9MfQcivnP{od>S)2vB4Sn z<-sM1C8fnqiAB*MUPyj^P7;irm=u0%9NsGnF3QVc&(BK-Dq-B1_?>04fe6cHZlJ$_p$OzN WPv#dCFKmTbKb#p;4&- diff --git a/.gitignore b/.gitignore index 63f4e874..35aad328 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,6 @@ out/ Domain/src/main/generated/**/*.java -.DS_Store \ No newline at end of file +.DS_Store + +AuthKey_N47B75FLFP.p8 \ No newline at end of file diff --git a/Api/src/main/java/tify/server/api/user/controller/UserController.java b/Api/src/main/java/tify/server/api/user/controller/UserController.java index c740041e..f03cac4f 100644 --- a/Api/src/main/java/tify/server/api/user/controller/UserController.java +++ b/Api/src/main/java/tify/server/api/user/controller/UserController.java @@ -239,15 +239,12 @@ public Long getMyDailyQuestionCountList( return retrieveMyDailyAnswerUseCase.countByCategory(userId, dailyQuestionCategory); } - @Operation(summary = "유저가 답변한 데일리 질문에 대한 답변을 카테고리별로 조회합니다.") + @Operation(summary = "유저가 답변한 데일리 질문에 대한 답변을 월별로 카테고리를 이용해 조회합니다.") @GetMapping("/daily-answer/{userId}") - public SliceResponse getMyDailyAnswerList( - @PathVariable Long userId, - @RequestParam DailyQuestionCategory dailyQuestionCategory, - @ParameterObject @PageableDefault Pageable pageable) { + public List> getMyDailyAnswerList( + @PathVariable Long userId, @RequestParam DailyQuestionCategory dailyQuestionCategory) { - return SliceResponse.of( - retrieveMyDailyAnswerUseCase.execute(userId, dailyQuestionCategory, pageable)); + return retrieveMyDailyAnswerUseCase.execute(userId, dailyQuestionCategory); } @Operation(summary = "새로운 친구 목록을 조회합니다.") diff --git a/Api/src/main/java/tify/server/api/user/model/dto/vo/MyDailyQuestionAnswerVo.java b/Api/src/main/java/tify/server/api/user/model/dto/vo/MyDailyQuestionAnswerVo.java index 8a8a2e11..5fcfb46a 100644 --- a/Api/src/main/java/tify/server/api/user/model/dto/vo/MyDailyQuestionAnswerVo.java +++ b/Api/src/main/java/tify/server/api/user/model/dto/vo/MyDailyQuestionAnswerVo.java @@ -11,7 +11,10 @@ @Builder public class MyDailyQuestionAnswerVo { - @Schema(description = "답변한 날짜입니다.", example = "20000101") + @Schema(description = "답변한 월입니다.", example = "1") + private final int month; + + @Schema(description = "답변한 날짜입니다.", example = "2023-08-22T01:46:30.000+00:00") private final Timestamp answerTime; @Schema(description = "질문의 id(pk)값입니다.", example = "1") @@ -28,7 +31,8 @@ public class MyDailyQuestionAnswerVo { public static MyDailyQuestionAnswerVo from(DailyQuestionAnswerVo dailyQuestionAnswerVo) { return MyDailyQuestionAnswerVo.builder() - .answerTime(dailyQuestionAnswerVo.getDailyQuestion().getCreatedAt()) + .month(dailyQuestionAnswerVo.getMonth()) + .answerTime(dailyQuestionAnswerVo.getAnswer().getCreatedAt()) .questionId(dailyQuestionAnswerVo.getDailyQuestion().getId()) .question(dailyQuestionAnswerVo.getDailyQuestion().getContent()) .answerId(dailyQuestionAnswerVo.getAnswer().getId()) diff --git a/Api/src/main/java/tify/server/api/user/service/RetrieveMyDailyAnswerUseCase.java b/Api/src/main/java/tify/server/api/user/service/RetrieveMyDailyAnswerUseCase.java index 1e29e7f7..82909de4 100644 --- a/Api/src/main/java/tify/server/api/user/service/RetrieveMyDailyAnswerUseCase.java +++ b/Api/src/main/java/tify/server/api/user/service/RetrieveMyDailyAnswerUseCase.java @@ -4,8 +4,6 @@ import java.util.Arrays; import java.util.List; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Slice; import tify.server.api.user.model.dto.vo.MyDailyQuestionAnswerVo; import tify.server.api.user.model.dto.vo.UserDailyQuestionAnswerVo; import tify.server.core.annotation.UseCase; @@ -18,11 +16,11 @@ public class RetrieveMyDailyAnswerUseCase { private final AnswerAdaptor answerAdaptor; - public Slice execute( - Long userId, DailyQuestionCategory dailyQuestionCategory, Pageable pageable) { - return answerAdaptor - .searchMyAnswer(userId, dailyQuestionCategory, pageable) - .map(MyDailyQuestionAnswerVo::from); + public List> execute( + Long userId, DailyQuestionCategory dailyQuestionCategory) { + return answerAdaptor.searchMyAnswer(userId, dailyQuestionCategory).stream() + .map(list -> list.stream().map(MyDailyQuestionAnswerVo::from).toList()) + .toList(); } public List countByAllCategory(Long userId) { diff --git a/Domain/src/main/java/tify/server/domain/domains/question/adaptor/AnswerAdaptor.java b/Domain/src/main/java/tify/server/domain/domains/question/adaptor/AnswerAdaptor.java index 60ce9934..b1d5dfbf 100644 --- a/Domain/src/main/java/tify/server/domain/domains/question/adaptor/AnswerAdaptor.java +++ b/Domain/src/main/java/tify/server/domain/domains/question/adaptor/AnswerAdaptor.java @@ -1,10 +1,10 @@ package tify.server.domain.domains.question.adaptor; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import tify.server.core.annotation.Adaptor; import tify.server.domain.domains.question.domain.Answer; @@ -46,9 +46,13 @@ public Slice searchAnswer(Long userId, AnswerCondition answerCondition return answerRepository.searchToPage(userId, answerCondition); } - public Slice searchMyAnswer( - Long userId, DailyQuestionCategory dailyQuestionCategory, Pageable pageable) { - return answerRepository.searchMyAnswerToPage(userId, dailyQuestionCategory, pageable); + public List> searchMyAnswer( + Long userId, DailyQuestionCategory dailyQuestionCategory) { + List> list = new ArrayList<>(); + for (int i = 1; i <= 12; i++) { + list.add(answerRepository.searchMyAnswerToPage(userId, dailyQuestionCategory, i)); + } + return list; } public Long queryUserAnswerCountByDailyQuestionCategory( diff --git a/Domain/src/main/java/tify/server/domain/domains/question/dto/model/DailyQuestionAnswerVo.java b/Domain/src/main/java/tify/server/domain/domains/question/dto/model/DailyQuestionAnswerVo.java index 283d60ba..1b30271f 100644 --- a/Domain/src/main/java/tify/server/domain/domains/question/dto/model/DailyQuestionAnswerVo.java +++ b/Domain/src/main/java/tify/server/domain/domains/question/dto/model/DailyQuestionAnswerVo.java @@ -10,6 +10,8 @@ @AllArgsConstructor public class DailyQuestionAnswerVo { + private int month; + private DailyQuestion dailyQuestion; private Answer answer; diff --git a/Domain/src/main/java/tify/server/domain/domains/question/repository/AnswerCustomRepository.java b/Domain/src/main/java/tify/server/domain/domains/question/repository/AnswerCustomRepository.java index 1cda20bb..2b352d02 100644 --- a/Domain/src/main/java/tify/server/domain/domains/question/repository/AnswerCustomRepository.java +++ b/Domain/src/main/java/tify/server/domain/domains/question/repository/AnswerCustomRepository.java @@ -2,7 +2,6 @@ import java.util.List; -import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import tify.server.domain.domains.question.domain.DailyQuestionCategory; import tify.server.domain.domains.question.dto.condition.AnswerCondition; @@ -17,6 +16,6 @@ public interface AnswerCustomRepository { Long countMyAnswerByDailyQuestionCategory(Long userId, List dailyQuestionIdList); - Slice searchMyAnswerToPage( - Long userId, DailyQuestionCategory dailyQuestionCategory, Pageable pageable); + List searchMyAnswerToPage( + Long userId, DailyQuestionCategory dailyQuestionCategory, int month); } diff --git a/Domain/src/main/java/tify/server/domain/domains/question/repository/AnswerCustomRepositoryImpl.java b/Domain/src/main/java/tify/server/domain/domains/question/repository/AnswerCustomRepositoryImpl.java index 6321c596..609e65c6 100644 --- a/Domain/src/main/java/tify/server/domain/domains/question/repository/AnswerCustomRepositoryImpl.java +++ b/Domain/src/main/java/tify/server/domain/domains/question/repository/AnswerCustomRepositoryImpl.java @@ -10,7 +10,6 @@ import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.List; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import tify.server.domain.common.util.SliceUtil; import tify.server.domain.domains.question.domain.DailyQuestionCategory; @@ -67,24 +66,24 @@ public Long countMyAnswerByDailyQuestionCategory(Long userId, List dailyQu } @Override - public Slice searchMyAnswerToPage( - Long userId, DailyQuestionCategory dailyQuestionCategory, Pageable pageable) { + public List searchMyAnswerToPage( + Long userId, DailyQuestionCategory dailyQuestionCategory, int month) { - List dailyQuestionAnswerVoList = - queryFactory - .select( - Projections.constructor( - DailyQuestionAnswerVo.class, dailyQuestion, answer)) - .from(answer) - .join(dailyQuestion) - .on(answer.questionId.eq(dailyQuestion.id)) - .where( - answer.userId.eq(userId), - dailyQuestion.category.eq(dailyQuestionCategory)) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize() + 1) - .fetch(); - - return SliceUtil.valueOf(dailyQuestionAnswerVoList, pageable); + return queryFactory + .select( + Projections.constructor( + DailyQuestionAnswerVo.class, + answer.createdAt.month(), + dailyQuestion, + answer)) + .from(answer) + .join(dailyQuestion) + .on(answer.questionId.eq(dailyQuestion.id)) + .where( + answer.userId.eq(userId), + dailyQuestion.category.eq(dailyQuestionCategory), + answer.createdAt.month().eq(month)) + .orderBy(answer.createdAt.desc()) + .fetch(); } }