diff --git a/src/main/java/org/programmers/signalbuddy/domain/feedback/controller/FeedbackController.java b/src/main/java/org/programmers/signalbuddy/domain/feedback/controller/FeedbackController.java index 1f4b9aed..5dc16939 100644 --- a/src/main/java/org/programmers/signalbuddy/domain/feedback/controller/FeedbackController.java +++ b/src/main/java/org/programmers/signalbuddy/domain/feedback/controller/FeedbackController.java @@ -47,11 +47,9 @@ public ResponseEntity writeFeedback( @GetMapping("/admin") public ResponseEntity> searchFeedbackList( @PageableDefault(page = 0, size = 10, sort = "createAt", direction = Direction.DESC) Pageable pageable, - @RequestParam(required = false, name = "startDate") - @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate, - @RequestParam(required = false, name = "endDate") - @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate, - @RequestParam(required = false, name = "answerStatus") Long answerStatus) { + @RequestParam(required = false, name = "startDate") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate, + @RequestParam(required = false, name = "endDate") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate, + @RequestParam(required = false, name = "answerStatus", defaultValue = "-1") Long answerStatus) { return ResponseEntity.ok() .body(feedbackService.searchFeedbackList(pageable, startDate, endDate, answerStatus)); } @@ -61,7 +59,7 @@ public ResponseEntity> searchFeedbackList( public ResponseEntity> searchFeedbackList( @PageableDefault(page = 0, size = 10, sort = "createAt", direction = Direction.DESC) Pageable pageable, @RequestParam(name = "keyword") String keyword, - @RequestParam(required = false, name = "answerStatus") Long answerStatus) { + @RequestParam(required = false, name = "answerStatus", defaultValue = "-1") Long answerStatus) { return ResponseEntity.ok() .body(feedbackService.searchByKeyword(pageable, keyword, answerStatus)); } @@ -69,8 +67,9 @@ public ResponseEntity> searchFeedbackList( @Operation(summary = "피드백 목록 조회") @GetMapping public ResponseEntity> searchFeedbackList( - @PageableDefault(page = 0, size = 10) Pageable pageable) { - return ResponseEntity.ok().body(feedbackService.searchFeedbackList(pageable)); + @PageableDefault(page = 0, size = 10) Pageable pageable, + @RequestParam(required = false, name = "answerStatus", defaultValue = "-1") Long answerStatus) { + return ResponseEntity.ok().body(feedbackService.searchFeedbackList(pageable, answerStatus)); } @Operation(summary = "피드백 상세 조회") diff --git a/src/main/java/org/programmers/signalbuddy/domain/feedback/repository/CustomFeedbackRepository.java b/src/main/java/org/programmers/signalbuddy/domain/feedback/repository/CustomFeedbackRepository.java index ad785ae4..0764efe9 100644 --- a/src/main/java/org/programmers/signalbuddy/domain/feedback/repository/CustomFeedbackRepository.java +++ b/src/main/java/org/programmers/signalbuddy/domain/feedback/repository/CustomFeedbackRepository.java @@ -7,7 +7,7 @@ public interface CustomFeedbackRepository { - Page findAllByActiveMembers(Pageable pageable); + Page findAllByActiveMembers(Pageable pageable, Long answerStatus); Page findPagedByMember(Long memberId, Pageable pageable); diff --git a/src/main/java/org/programmers/signalbuddy/domain/feedback/repository/CustomFeedbackRepositoryImpl.java b/src/main/java/org/programmers/signalbuddy/domain/feedback/repository/CustomFeedbackRepositoryImpl.java index 029fa914..2e97a014 100644 --- a/src/main/java/org/programmers/signalbuddy/domain/feedback/repository/CustomFeedbackRepositoryImpl.java +++ b/src/main/java/org/programmers/signalbuddy/domain/feedback/repository/CustomFeedbackRepositoryImpl.java @@ -45,21 +45,21 @@ public class CustomFeedbackRepositoryImpl implements CustomFeedbackRepository { private final JPAQueryFactory jpaQueryFactory; @Override - public Page findAllByActiveMembers(Pageable pageable) { + public Page findAllByActiveMembers(Pageable pageable, Long answerStatus) { + BooleanExpression answerStatusCondition = answerStatusCondition(answerStatus); + List results = jpaQueryFactory .select(feedbackResponseDto).from(feedback) .join(member).on(feedback.member.eq(member)).fetchJoin() - .where(member.memberStatus.eq(MemberStatus.ACTIVITY)) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) + .where(member.memberStatus.eq(MemberStatus.ACTIVITY).and(answerStatusCondition)) + .offset(pageable.getOffset()).limit(pageable.getPageSize()) .orderBy(new OrderSpecifier<>(Order.DESC, feedback.createdAt)).fetch(); long count = Optional.ofNullable( - jpaQueryFactory - .select(feedback.count()).from(feedback) + jpaQueryFactory.select(feedback.count()).from(feedback) .join(member).on(feedback.member.eq(member)).fetchJoin() - .where(member.memberStatus.eq(MemberStatus.ACTIVITY)).fetchOne() - ).orElse(0L); + .where(member.memberStatus.eq(MemberStatus.ACTIVITY).and(answerStatusCondition)) + .fetchOne()).orElse(0L); return new PageImpl<>(results, pageable, count); } @@ -81,20 +81,20 @@ public Page findAll(Pageable pageable, LocalDate startDate, LocalDate endDate, Long answerStatus) { BooleanExpression betweenDates = betweenDates(feedback.createdAt, startDate, endDate); + BooleanExpression answerStatusCondition = answerStatusCondition(answerStatus); List results = jpaQueryFactory .select(feedbackResponseDto).from(feedback) .join(member).on(feedback.member.eq(member)).fetchJoin() .where(betweenDates.and(answerStatusCondition(answerStatus))) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) + .offset(pageable.getOffset()).limit(pageable.getPageSize()) .orderBy(getOrderSpecifiers(pageable, feedback.getType(), "feedback")).fetch(); long count = Optional.ofNullable( jpaQueryFactory .select(feedback.count()).from(feedback) .join(member).on(feedback.member.eq(member)).fetchJoin() - .where(betweenDates.and(answerStatusCondition(answerStatus))).fetchOne() + .where(betweenDates.and(answerStatusCondition)).fetchOne() ).orElse(0L); return new PageImpl<>(results, pageable, count); diff --git a/src/main/java/org/programmers/signalbuddy/domain/feedback/service/FeedbackService.java b/src/main/java/org/programmers/signalbuddy/domain/feedback/service/FeedbackService.java index e17f2e12..f9eae0ee 100644 --- a/src/main/java/org/programmers/signalbuddy/domain/feedback/service/FeedbackService.java +++ b/src/main/java/org/programmers/signalbuddy/domain/feedback/service/FeedbackService.java @@ -29,20 +29,23 @@ public class FeedbackService { private final MemberRepository memberRepository; private final FeedbackJdbcRepository feedbackJdbcRepository; - public PageResponse searchFeedbackList(Pageable pageable) { - Page responsePage = feedbackRepository.findAllByActiveMembers(pageable); + public PageResponse searchFeedbackList(Pageable pageable, Long answerStatus) { + Page responsePage = feedbackRepository.findAllByActiveMembers(pageable, + answerStatus); return new PageResponse<>(responsePage); } public PageResponse searchFeedbackList(Pageable pageable, LocalDate startDate, LocalDate endDate, Long answerStatus) { - Page responsePage = feedbackRepository.findAll(pageable, startDate, endDate, answerStatus); + Page responsePage = feedbackRepository.findAll(pageable, startDate, + endDate, answerStatus); return new PageResponse<>(responsePage); } public PageResponse searchByKeyword(Pageable pageable, String keyword, Long answerStatus) { - Page responsePage = feedbackJdbcRepository.fullTextSearch(pageable, keyword, answerStatus); + Page responsePage = feedbackJdbcRepository.fullTextSearch(pageable, + keyword, answerStatus); return new PageResponse<>(responsePage); } diff --git a/src/test/java/org/programmers/signalbuddy/domain/feedback/repository/FeedbackRepositoryTest.java b/src/test/java/org/programmers/signalbuddy/domain/feedback/repository/FeedbackRepositoryTest.java index 7655e7dc..74763a4c 100644 --- a/src/test/java/org/programmers/signalbuddy/domain/feedback/repository/FeedbackRepositoryTest.java +++ b/src/test/java/org/programmers/signalbuddy/domain/feedback/repository/FeedbackRepositoryTest.java @@ -56,7 +56,8 @@ void setup() { void findAllByActiveMembers() { // when Pageable pageable = PageRequest.of(3, 10); - Page actual = feedbackRepository.findAllByActiveMembers(pageable); + Long answerStatus = -1L; // 모든 피드백 보기 + Page actual = feedbackRepository.findAllByActiveMembers(pageable, answerStatus); // then SoftAssertions.assertSoftly(softAssertions -> {