From 9e1b9d4720be4f0aeab181efc4a539b07fedf2e8 Mon Sep 17 00:00:00 2001 From: seo-young Date: Wed, 6 Mar 2024 16:15:53 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=20=EB=A6=AC=EB=B7=B0=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/mapper/KeywordMapper.java | 14 ++++++ .../domain/service/KeywordSaveService.java | 17 ++++++++ .../domain/service/MovieQueryService.java | 5 +++ .../dto/request/ReviewRequest.java | 34 +++++++++++++++ .../application/mapper/ReviewMapper.java | 19 ++++++++ .../service/ReviewCreateService.java | 43 +++++++++++++++++++ .../domain/service/ReviewSaveService.java | 17 ++++++++ .../review/presentation/ReviewController.java | 20 +++++++++ 8 files changed, 169 insertions(+) create mode 100644 src/main/java/com/mookive/mookive_backend/keyword/application/mapper/KeywordMapper.java create mode 100644 src/main/java/com/mookive/mookive_backend/keyword/domain/service/KeywordSaveService.java create mode 100644 src/main/java/com/mookive/mookive_backend/review/application/dto/request/ReviewRequest.java create mode 100644 src/main/java/com/mookive/mookive_backend/review/application/mapper/ReviewMapper.java create mode 100644 src/main/java/com/mookive/mookive_backend/review/application/service/ReviewCreateService.java create mode 100644 src/main/java/com/mookive/mookive_backend/review/domain/service/ReviewSaveService.java create mode 100644 src/main/java/com/mookive/mookive_backend/review/presentation/ReviewController.java diff --git a/src/main/java/com/mookive/mookive_backend/keyword/application/mapper/KeywordMapper.java b/src/main/java/com/mookive/mookive_backend/keyword/application/mapper/KeywordMapper.java new file mode 100644 index 0000000..566f791 --- /dev/null +++ b/src/main/java/com/mookive/mookive_backend/keyword/application/mapper/KeywordMapper.java @@ -0,0 +1,14 @@ +package com.mookive.mookive_backend.keyword.application.mapper; + +import com.mookive.mookive_backend.keyword.domain.entity.Keyword; +import com.mookive.mookive_backend.review.domain.entity.Review; + +public class KeywordMapper { + + public static Keyword mapToKeyword(Review review, String word) { + return Keyword.builder() + .review(review) + .word(word) + .build(); + } +} diff --git a/src/main/java/com/mookive/mookive_backend/keyword/domain/service/KeywordSaveService.java b/src/main/java/com/mookive/mookive_backend/keyword/domain/service/KeywordSaveService.java new file mode 100644 index 0000000..a45918f --- /dev/null +++ b/src/main/java/com/mookive/mookive_backend/keyword/domain/service/KeywordSaveService.java @@ -0,0 +1,17 @@ +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; + +@Service +@RequiredArgsConstructor +public class KeywordSaveService { + + private final KeywordRepository keywordRepository; + + public void saveKeyword(Keyword keyword) { + keywordRepository.save(keyword); + } +} diff --git a/src/main/java/com/mookive/mookive_backend/movie/domain/service/MovieQueryService.java b/src/main/java/com/mookive/mookive_backend/movie/domain/service/MovieQueryService.java index 84655ee..f5920fc 100644 --- a/src/main/java/com/mookive/mookive_backend/movie/domain/service/MovieQueryService.java +++ b/src/main/java/com/mookive/mookive_backend/movie/domain/service/MovieQueryService.java @@ -14,4 +14,9 @@ public class MovieQueryService { public Movie findByTitle(String title) { return movieRepository.findByTitle(title); } + + public Movie findById(Long id) { + return movieRepository.findById(id) + .orElseThrow(() -> new IllegalArgumentException("Movie not found")); + } } diff --git a/src/main/java/com/mookive/mookive_backend/review/application/dto/request/ReviewRequest.java b/src/main/java/com/mookive/mookive_backend/review/application/dto/request/ReviewRequest.java new file mode 100644 index 0000000..6248702 --- /dev/null +++ b/src/main/java/com/mookive/mookive_backend/review/application/dto/request/ReviewRequest.java @@ -0,0 +1,34 @@ +package com.mookive.mookive_backend.review.application.dto.request; + +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.util.ArrayList; + +public class ReviewRequest { + + @Getter + @NoArgsConstructor + public static class ReviewCreateRequest { + private Long movieId; + private Long userId; + private String rating; + private String text; + private LocalDate date; + private ArrayList keywords; + + + @Builder + public ReviewCreateRequest(Long movieId, Long userId, String rating, + String text, LocalDate date, ArrayList keywords) { + this.movieId = movieId; + this.userId = userId; + 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 new file mode 100644 index 0000000..2d58ad7 --- /dev/null +++ b/src/main/java/com/mookive/mookive_backend/review/application/mapper/ReviewMapper.java @@ -0,0 +1,19 @@ +package com.mookive.mookive_backend.review.application.mapper; + +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.domain.entity.Review; +import com.mookive.mookive_backend.user.domain.entity.User; + +public class ReviewMapper { + + public static Review mapToReview(ReviewRequest.ReviewCreateRequest reviewCreateRequest, Movie movie, User user) { + return Review.builder() + .movie(movie) + .user(user) + .rating(reviewCreateRequest.getRating()) + .text(reviewCreateRequest.getText()) + .date(reviewCreateRequest.getDate()) + .build(); + } +} diff --git a/src/main/java/com/mookive/mookive_backend/review/application/service/ReviewCreateService.java b/src/main/java/com/mookive/mookive_backend/review/application/service/ReviewCreateService.java new file mode 100644 index 0000000..a220828 --- /dev/null +++ b/src/main/java/com/mookive/mookive_backend/review/application/service/ReviewCreateService.java @@ -0,0 +1,43 @@ +package com.mookive.mookive_backend.review.application.service; + + +import com.mookive.mookive_backend.keyword.application.mapper.KeywordMapper; +import com.mookive.mookive_backend.keyword.domain.entity.Keyword; +import com.mookive.mookive_backend.keyword.domain.service.KeywordSaveService; +import com.mookive.mookive_backend.movie.domain.entity.Movie; +import com.mookive.mookive_backend.movie.domain.service.MovieQueryService; +import com.mookive.mookive_backend.review.application.dto.request.ReviewRequest; +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.ReviewSaveService; +import com.mookive.mookive_backend.user.domain.entity.User; +import com.mookive.mookive_backend.user.domain.service.UserQueryService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; + +@Service +@RequiredArgsConstructor +public class ReviewCreateService { + + private final MovieQueryService movieQueryService; + private final UserQueryService userQueryService; + private final ReviewSaveService reviewSaveService; + private final KeywordSaveService keywordSaveService; + + public void createReview(ReviewRequest.ReviewCreateRequest reviewCreateRequest) { + Long movieId = reviewCreateRequest.getMovieId(); + Movie movie = movieQueryService.findById(movieId); + Long userId = reviewCreateRequest.getUserId(); + User user = userQueryService.findById(userId); + Review review = ReviewMapper.mapToReview(reviewCreateRequest, movie, user); + reviewSaveService.saveReview(review); + + ArrayList keywords = reviewCreateRequest.getKeywords(); + for(String word : keywords){ + Keyword keyword = KeywordMapper.mapToKeyword(review, word); + keywordSaveService.saveKeyword(keyword); + } + } +} diff --git a/src/main/java/com/mookive/mookive_backend/review/domain/service/ReviewSaveService.java b/src/main/java/com/mookive/mookive_backend/review/domain/service/ReviewSaveService.java new file mode 100644 index 0000000..3dbf83e --- /dev/null +++ b/src/main/java/com/mookive/mookive_backend/review/domain/service/ReviewSaveService.java @@ -0,0 +1,17 @@ +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 ReviewSaveService { + + private final ReviewRepository reviewRepository; + + public void saveReview(Review review) { + reviewRepository.save(review); + } +} 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 new file mode 100644 index 0000000..6c64215 --- /dev/null +++ b/src/main/java/com/mookive/mookive_backend/review/presentation/ReviewController.java @@ -0,0 +1,20 @@ +package com.mookive.mookive_backend.review.presentation; + +import com.mookive.mookive_backend.review.application.dto.request.ReviewRequest; +import com.mookive.mookive_backend.review.application.service.ReviewCreateService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class ReviewController { + + private final ReviewCreateService reviewCreateService; + + @PostMapping("/review") + public void createReview(@RequestBody ReviewRequest.ReviewCreateRequest reviewCreateRequest) { + reviewCreateService.createReview(reviewCreateRequest); + } +}