From 46ececeb5249bef71a228f1f6ac6685b23c1dd8e Mon Sep 17 00:00:00 2001 From: ah9mon Date: Mon, 14 Aug 2023 11:21:35 +0900 Subject: [PATCH] fix: deal response service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - deal response에 review여부 및 deal_id 추가 - deal list get API에 시간 범위로 거르는 기능 추가 --- .../controller/DealController.java | 14 +++++++++++--- .../dto/response/DealResponse.java | 8 +++++++- .../dto/response/ReviewResponse.java | 14 +++++++------- .../repository/DealRepository.java | 14 ++++++++++++++ .../com/anywayclear/service/DealService.java | 19 ++++++++++++++----- .../anywayclear/service/ReviewService.java | 4 ++-- 6 files changed, 55 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/anywayclear/controller/DealController.java b/src/main/java/com/anywayclear/controller/DealController.java index f1b23a9..c0cd98e 100644 --- a/src/main/java/com/anywayclear/controller/DealController.java +++ b/src/main/java/com/anywayclear/controller/DealController.java @@ -13,6 +13,8 @@ import javax.validation.Valid; import java.net.URI; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; @RestController @RequestMapping("/api/deals") @@ -30,8 +32,14 @@ public ResponseEntity createDeal(@Valid @RequestBody DealCreateRequest req } @GetMapping - public ResponseEntity> getDealList(@AuthenticationPrincipal OAuth2User oAuth2User, Pageable pageable) { - String userId = (String) oAuth2User.getAttributes().get("userId"); - return ResponseEntity.ok(dealService.getDealList(userId, pageable)); + public ResponseEntity> getDealList( + @RequestParam(value = "user-id") String userId, + @RequestParam(value = "start-date", required = false) String startDateString, + @RequestParam(value = "end-date", required = false) String endDateString, + Pageable pageable) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime startDate = LocalDateTime.parse(startDateString + " 00:00:00", formatter); + LocalDateTime endDate = LocalDateTime.parse(endDateString + " 00:00:00", formatter); + return ResponseEntity.ok(dealService.getDealList(userId, startDate, endDate, pageable)); } } diff --git a/src/main/java/com/anywayclear/dto/response/DealResponse.java b/src/main/java/com/anywayclear/dto/response/DealResponse.java index eab5771..dcd676a 100644 --- a/src/main/java/com/anywayclear/dto/response/DealResponse.java +++ b/src/main/java/com/anywayclear/dto/response/DealResponse.java @@ -9,28 +9,34 @@ @Getter @Setter public class DealResponse { + private long dealId; private int endPrice; private boolean isPaid; private Member consumer; private Member seller; private ProduceResponse produce; + private boolean isReviewed; @Builder - public DealResponse(int endPrice, boolean isPaid, Member consumer, Member seller, ProduceResponse produce) { + public DealResponse(long dealId,int endPrice, boolean isPaid, Member consumer, Member seller, ProduceResponse produce, boolean isReviewed) { + this.dealId = dealId; this.endPrice = endPrice; this.isPaid = isPaid; this.consumer = consumer; this.seller = seller; this.produce = produce; + this.isReviewed = isReviewed; } public static DealResponse toResponse(Deal deal) { return DealResponse.builder() + .dealId(deal.getId()) .endPrice(deal.getEndPrice()) .isPaid(deal.isPaid()) .consumer(deal.getConsumer()) .seller(deal.getSeller()) .produce(ProduceResponse.toResponse(deal.getProduce())) + .isReviewed((deal.getReview() != null) ? true : false) .build(); } } diff --git a/src/main/java/com/anywayclear/dto/response/ReviewResponse.java b/src/main/java/com/anywayclear/dto/response/ReviewResponse.java index b034665..0602be6 100644 --- a/src/main/java/com/anywayclear/dto/response/ReviewResponse.java +++ b/src/main/java/com/anywayclear/dto/response/ReviewResponse.java @@ -14,18 +14,18 @@ public class ReviewResponse { private int score; private LocalDateTime createdAt; private DealResponse deal; - private String memberUserId; - private String memberNickname; + private String reviewerId; + private String reviewerNickname; @Builder - public ReviewResponse(Long id, String comment, int score, LocalDateTime createdAt, DealResponse deal, String memberUserId, String memberNickname) { + public ReviewResponse(Long id, String comment, int score, LocalDateTime createdAt, DealResponse deal, String reviewerId, String reviewerNickname) { this.id = id; this.comment = comment; this.score = score; this.createdAt = createdAt; this.deal = deal; - this.memberUserId = memberUserId; - this.memberNickname = memberNickname; + this.reviewerId = reviewerId; + this.reviewerNickname = reviewerNickname; } public static ReviewResponse toResponse(Review review) { @@ -35,8 +35,8 @@ public static ReviewResponse toResponse(Review review) { .score(review.getScore()) .createdAt(review.getCreatedAt()) .deal(DealResponse.toResponse(review.getDeal())) - .memberUserId(review.getMember().getUserId()) - .memberNickname(review.getMember().getNickname()) + .reviewerId(review.getMember().getUserId()) + .reviewerNickname(review.getMember().getNickname()) .build(); } } diff --git a/src/main/java/com/anywayclear/repository/DealRepository.java b/src/main/java/com/anywayclear/repository/DealRepository.java index 47b1961..59be6cc 100644 --- a/src/main/java/com/anywayclear/repository/DealRepository.java +++ b/src/main/java/com/anywayclear/repository/DealRepository.java @@ -6,9 +6,23 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import java.time.LocalDateTime; + public interface DealRepository extends JpaRepository { Page findAllByConsumer(Member member, Pageable pageable); Page findAllBySeller(Member member, Pageable pageable); + + Page findAllByConsumerAndProduce_EndDateBetween( + Member member, + LocalDateTime startDate, + LocalDateTime endDate, + Pageable pageable); + + Page findAllBySellerAndProduce_EndDateBetween( + Member member, + LocalDateTime startDate, + LocalDateTime endDate, + Pageable pageable); } diff --git a/src/main/java/com/anywayclear/service/DealService.java b/src/main/java/com/anywayclear/service/DealService.java index 4d94304..0596d2c 100644 --- a/src/main/java/com/anywayclear/service/DealService.java +++ b/src/main/java/com/anywayclear/service/DealService.java @@ -13,6 +13,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; import java.util.List; import static com.anywayclear.exception.ExceptionCode.INVALID_DEAL; @@ -38,13 +39,21 @@ public DealResponse getDeal(Long id) { } @Transactional(readOnly = true) - public MultiResponse getDealList(String userId, Pageable pageable) { + public MultiResponse getDealList(String userId, LocalDateTime startDate, LocalDateTime endDate, Pageable pageable) { Member member = memberRepository.findByUserId(userId).orElseThrow(() -> new CustomException(INVALID_MEMBER)); Page dealPage; - if (member.getRole().equals("ROLE_SELLER")) { // 판매자 일 경우 - dealPage = dealRepository.findAllBySeller(member, pageable); - } else { // 소비자 일 경우 - dealPage = dealRepository.findAllByConsumer(member, pageable); + if (startDate != null && endDate != null) { + if (member.getRole().equals("ROLE_SELLER")) { // 판매자 일 경우 + dealPage = dealRepository.findAllBySellerAndProduce_EndDateBetween(member, startDate, endDate, pageable); + } else { // 소비자 일 경우 + dealPage = dealRepository.findAllByConsumerAndProduce_EndDateBetween(member, startDate, endDate, pageable); + } + } else { + if (member.getRole().equals("ROLE_SELLER")) { // 판매자 일 경우 + dealPage = dealRepository.findAllBySeller(member, pageable); + } else { // 소비자 일 경우 + dealPage = dealRepository.findAllByConsumer(member, pageable); + } } List dealResponseList = dealPage.map(DealResponse::toResponse).getContent(); return new MultiResponse<>(dealResponseList, dealPage); diff --git a/src/main/java/com/anywayclear/service/ReviewService.java b/src/main/java/com/anywayclear/service/ReviewService.java index f30d9ae..003db17 100644 --- a/src/main/java/com/anywayclear/service/ReviewService.java +++ b/src/main/java/com/anywayclear/service/ReviewService.java @@ -93,8 +93,8 @@ public MultiResponse getReviewList(String userId, Pageab Page reviewPage; boolean isSeller = member.getRole().equals("ROLE_SELLER"); - boolean hasQuery = q != null; - boolean hasSort = sortedBy != null; + boolean hasQuery = (q != null); + boolean hasSort = (sortedBy != null); if (isSeller) { if (!hasQuery && !hasSort) {