From b974f63e46ff7f64e595deebd87fff6aa18cfeeb Mon Sep 17 00:00:00 2001 From: syyling Date: Tue, 12 Mar 2024 00:46:53 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=20=EB=A6=AC=EB=B7=B0=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/repository/KeywordRepository.java | 4 +++ .../domain/service/KeywordQueryService.java | 19 ++++++++++++ .../dto/response/ReviewResponse.java | 29 +++++++++++++++++ .../application/mapper/ReviewMapper.java | 12 +++++++ .../application/service/ReviewGetService.java | 31 +++++++++++++++++++ .../domain/service/ReviewQueryService.java | 18 +++++++++++ .../review/presentation/ReviewController.java | 13 ++++++-- 7 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/mookive/mookive_backend/keyword/domain/service/KeywordQueryService.java create mode 100644 src/main/java/com/mookive/mookive_backend/review/application/dto/response/ReviewResponse.java create mode 100644 src/main/java/com/mookive/mookive_backend/review/application/service/ReviewGetService.java create mode 100644 src/main/java/com/mookive/mookive_backend/review/domain/service/ReviewQueryService.java diff --git a/src/main/java/com/mookive/mookive_backend/keyword/domain/repository/KeywordRepository.java b/src/main/java/com/mookive/mookive_backend/keyword/domain/repository/KeywordRepository.java index e28edfd..5763a43 100644 --- a/src/main/java/com/mookive/mookive_backend/keyword/domain/repository/KeywordRepository.java +++ b/src/main/java/com/mookive/mookive_backend/keyword/domain/repository/KeywordRepository.java @@ -3,5 +3,9 @@ import com.mookive.mookive_backend.keyword.domain.entity.Keyword; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface KeywordRepository extends JpaRepository { + + List findByReviewId(Long reviewId); } diff --git a/src/main/java/com/mookive/mookive_backend/keyword/domain/service/KeywordQueryService.java b/src/main/java/com/mookive/mookive_backend/keyword/domain/service/KeywordQueryService.java new file mode 100644 index 0000000..71f5964 --- /dev/null +++ b/src/main/java/com/mookive/mookive_backend/keyword/domain/service/KeywordQueryService.java @@ -0,0 +1,19 @@ +package com.mookive.mookive_backend.keyword.domain.service; + +import com.mookive.mookive_backend.keyword.domain.entity.Keyword; +import com.mookive.mookive_backend.keyword.domain.repository.KeywordRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class KeywordQueryService { + + private final KeywordRepository keywordRepository; + + public List findByReviewId(Long reviewId) { + return keywordRepository.findByReviewId(reviewId); + } +} diff --git a/src/main/java/com/mookive/mookive_backend/review/application/dto/response/ReviewResponse.java b/src/main/java/com/mookive/mookive_backend/review/application/dto/response/ReviewResponse.java new file mode 100644 index 0000000..4d8f3eb --- /dev/null +++ b/src/main/java/com/mookive/mookive_backend/review/application/dto/response/ReviewResponse.java @@ -0,0 +1,29 @@ +package com.mookive.mookive_backend.review.application.dto.response; + +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.util.List; + +public class ReviewResponse { + + @Getter + @NoArgsConstructor + public static class ReviewDetailResponse { + private String rating; + private String text; + private LocalDate date; + private List keywords; + + @Builder + public ReviewDetailResponse(String rating, String text, LocalDate date, List keywords) { + this.rating = rating; + this.text = text; + this.date = date; + this.keywords = keywords; + } + } + +} diff --git a/src/main/java/com/mookive/mookive_backend/review/application/mapper/ReviewMapper.java b/src/main/java/com/mookive/mookive_backend/review/application/mapper/ReviewMapper.java index 2d58ad7..5d71690 100644 --- a/src/main/java/com/mookive/mookive_backend/review/application/mapper/ReviewMapper.java +++ b/src/main/java/com/mookive/mookive_backend/review/application/mapper/ReviewMapper.java @@ -2,9 +2,12 @@ import com.mookive.mookive_backend.movie.domain.entity.Movie; import com.mookive.mookive_backend.review.application.dto.request.ReviewRequest; +import com.mookive.mookive_backend.review.application.dto.response.ReviewResponse; import com.mookive.mookive_backend.review.domain.entity.Review; import com.mookive.mookive_backend.user.domain.entity.User; +import java.util.List; + public class ReviewMapper { public static Review mapToReview(ReviewRequest.ReviewCreateRequest reviewCreateRequest, Movie movie, User user) { @@ -16,4 +19,13 @@ public static Review mapToReview(ReviewRequest.ReviewCreateRequest reviewCreateR .date(reviewCreateRequest.getDate()) .build(); } + + public static ReviewResponse.ReviewDetailResponse mapToReviewDetailResponse(Review review, List keywords) { + return ReviewResponse.ReviewDetailResponse.builder() + .rating(review.getRating()) + .text(review.getText()) + .date(review.getDate()) + .keywords(keywords) + .build(); + } } diff --git a/src/main/java/com/mookive/mookive_backend/review/application/service/ReviewGetService.java b/src/main/java/com/mookive/mookive_backend/review/application/service/ReviewGetService.java new file mode 100644 index 0000000..d3c7719 --- /dev/null +++ b/src/main/java/com/mookive/mookive_backend/review/application/service/ReviewGetService.java @@ -0,0 +1,31 @@ +package com.mookive.mookive_backend.review.application.service; + +import com.mookive.mookive_backend.keyword.domain.entity.Keyword; +import com.mookive.mookive_backend.keyword.domain.service.KeywordQueryService; +import com.mookive.mookive_backend.review.application.dto.response.ReviewResponse; +import com.mookive.mookive_backend.review.application.mapper.ReviewMapper; +import com.mookive.mookive_backend.review.domain.entity.Review; +import com.mookive.mookive_backend.review.domain.service.ReviewQueryService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class ReviewGetService { + + private final ReviewQueryService reviewQueryService; + private final KeywordQueryService keywordQueryService; + + public ReviewResponse.ReviewDetailResponse getReview(Long reviewId) { + Review review = reviewQueryService.findById(reviewId); + List keywordList = keywordQueryService.findByReviewId(reviewId); + List keywords= new ArrayList<>(); + for(Keyword keyword : keywordList){ + keywords.add(keyword.getWord()); + } + return ReviewMapper.mapToReviewDetailResponse(review, keywords); + } +} diff --git a/src/main/java/com/mookive/mookive_backend/review/domain/service/ReviewQueryService.java b/src/main/java/com/mookive/mookive_backend/review/domain/service/ReviewQueryService.java new file mode 100644 index 0000000..36ed748 --- /dev/null +++ b/src/main/java/com/mookive/mookive_backend/review/domain/service/ReviewQueryService.java @@ -0,0 +1,18 @@ +package com.mookive.mookive_backend.review.domain.service; + +import com.mookive.mookive_backend.review.domain.entity.Review; +import com.mookive.mookive_backend.review.domain.repository.ReviewRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class ReviewQueryService { + + private final ReviewRepository reviewRepository; + + public Review findById(Long reviewId) { + return reviewRepository.findById(reviewId) + .orElseThrow(() -> new IllegalArgumentException("Review not found")); + } +} diff --git a/src/main/java/com/mookive/mookive_backend/review/presentation/ReviewController.java b/src/main/java/com/mookive/mookive_backend/review/presentation/ReviewController.java index 6c64215..e0a7885 100644 --- a/src/main/java/com/mookive/mookive_backend/review/presentation/ReviewController.java +++ b/src/main/java/com/mookive/mookive_backend/review/presentation/ReviewController.java @@ -1,20 +1,27 @@ package com.mookive.mookive_backend.review.presentation; import com.mookive.mookive_backend.review.application.dto.request.ReviewRequest; +import com.mookive.mookive_backend.review.application.dto.response.ReviewResponse; import com.mookive.mookive_backend.review.application.service.ReviewCreateService; +import com.mookive.mookive_backend.review.application.service.ReviewGetService; import lombok.RequiredArgsConstructor; -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 public class ReviewController { private final ReviewCreateService reviewCreateService; + private final ReviewGetService reviewGetService; @PostMapping("/review") public void createReview(@RequestBody ReviewRequest.ReviewCreateRequest reviewCreateRequest) { reviewCreateService.createReview(reviewCreateRequest); } + + @GetMapping("/review/{reviewId}") + public ReviewResponse.ReviewDetailResponse getReview(@PathVariable Long reviewId) { + return reviewGetService.getReview(reviewId); + } + }