diff --git a/src/main/java/com/ftw/hometerview/core/domain/ResponseType.java b/src/main/java/com/ftw/hometerview/core/domain/ResponseType.java index 3bc5be7..6a3edd0 100644 --- a/src/main/java/com/ftw/hometerview/core/domain/ResponseType.java +++ b/src/main/java/com/ftw/hometerview/core/domain/ResponseType.java @@ -1,6 +1,5 @@ package com.ftw.hometerview.core.domain; -import com.ftw.hometerview.core.util.Constants; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/ftw/hometerview/place/repository/building/BuildingRepository.java b/src/main/java/com/ftw/hometerview/place/repository/building/BuildingRepository.java index 7ff5f80..776c80c 100644 --- a/src/main/java/com/ftw/hometerview/place/repository/building/BuildingRepository.java +++ b/src/main/java/com/ftw/hometerview/place/repository/building/BuildingRepository.java @@ -1,6 +1,7 @@ package com.ftw.hometerview.place.repository.building; import com.ftw.hometerview.place.domain.Building; +import java.util.List; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; @@ -8,4 +9,6 @@ public interface BuildingRepository extends MongoRepository, BuildingRepositoryCustom { + List findAllByCity(String city); + } diff --git a/src/main/java/com/ftw/hometerview/place/service/BuildingService.java b/src/main/java/com/ftw/hometerview/place/service/BuildingService.java index ee2de0f..4c2d360 100644 --- a/src/main/java/com/ftw/hometerview/place/service/BuildingService.java +++ b/src/main/java/com/ftw/hometerview/place/service/BuildingService.java @@ -20,4 +20,9 @@ public List searchByKeyword(String keyword, Pageable pageable) return response; } + public List getBuildingsByCity(String city) { + List buildings = this.buildingRepository.findAllByCity(city); + return buildings.stream().map(Building::getId).toList(); + } + } diff --git a/src/main/java/com/ftw/hometerview/review/controller/ReviewController.java b/src/main/java/com/ftw/hometerview/review/controller/ReviewController.java index 8681b63..2e6b571 100644 --- a/src/main/java/com/ftw/hometerview/review/controller/ReviewController.java +++ b/src/main/java/com/ftw/hometerview/review/controller/ReviewController.java @@ -6,7 +6,7 @@ import com.ftw.hometerview.core.annotation.NonAuthorized; import com.ftw.hometerview.core.domain.ResponseEntity; import com.ftw.hometerview.review.controller.dto.ReviewDto; -import com.ftw.hometerview.review.service.ReviewService; +import com.ftw.hometerview.review.service.ReviewServiceFacade; import io.swagger.v3.oas.annotations.Operation; import java.util.List; import lombok.RequiredArgsConstructor; @@ -28,16 +28,17 @@ @RestController public class ReviewController { - private final ReviewService reviewService; + private final ReviewServiceFacade reviewService; @Operation(summary = "홈 지역별 리뷰 리스트 조회") @NonAuthorized @GetMapping public ResponseEntity> getMainReviews( - @RequestParam(required = false, defaultValue = DEFAULT_KEYWORD) String buildingId, + // 사용처를 명확히 하고 required 조정 필요. 현재 홈화면 용으로 구현되어서 required임 + @RequestParam(required = false, defaultValue = DEFAULT_KEYWORD) String companyId, @RequestParam(required = false, defaultValue = DEFAULT_KEYWORD) String cityId, @PageableDefault(size = DEFAULT_PAGE_SIZE) Pageable pageable) { - var reviewList = this.reviewService.getHomeReviewList(buildingId, cityId, pageable); + var reviewList = this.reviewService.getHomeReviewList(companyId, cityId, pageable); return ResponseEntity.successResponse(reviewList); } diff --git a/src/main/java/com/ftw/hometerview/review/repository/ReviewRepository.java b/src/main/java/com/ftw/hometerview/review/repository/ReviewRepository.java index 2567274..36dbc36 100644 --- a/src/main/java/com/ftw/hometerview/review/repository/ReviewRepository.java +++ b/src/main/java/com/ftw/hometerview/review/repository/ReviewRepository.java @@ -11,6 +11,8 @@ public interface ReviewRepository extends MongoRepository { List getReviewByBuildingId(String buildingId, Pageable pageable); + List getReviewByCompanyId(String companyId, Pageable pageable); + List getReviewByMemberId(String memberId, Pageable pageable); } diff --git a/src/main/java/com/ftw/hometerview/review/service/ReviewService.java b/src/main/java/com/ftw/hometerview/review/service/ReviewService.java index 4e11c8c..0034e3d 100644 --- a/src/main/java/com/ftw/hometerview/review/service/ReviewService.java +++ b/src/main/java/com/ftw/hometerview/review/service/ReviewService.java @@ -1,21 +1,83 @@ package com.ftw.hometerview.review.service; +import static com.ftw.hometerview.core.interceptor.AuthUtil.getCurrentMemberId; + +import com.ftw.hometerview.core.domain.ResponseType; +import com.ftw.hometerview.core.exception.BadRequestException; +import com.ftw.hometerview.core.exception.NotFoundException; import com.ftw.hometerview.review.controller.dto.ReviewDto; +import com.ftw.hometerview.review.controller.dto.ReviewDto.Create; +import com.ftw.hometerview.review.controller.dto.ReviewDto.Detail; +import com.ftw.hometerview.review.controller.dto.ReviewDto.Meta; +import com.ftw.hometerview.review.controller.dto.ReviewDto.Modify; +import com.ftw.hometerview.review.domain.Review; +import com.ftw.hometerview.review.repository.ReviewRepository; +import java.util.Collections; import java.util.List; +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +@RequiredArgsConstructor +@Service +public class ReviewService { + + + private final ReviewRepository reviewRepository; + + public List getHomeReviewList(String companyId, Pageable pageable, List buildingIds) { + List reviews = this.reviewRepository.getReviewByCompanyId(companyId, pageable); + return reviews.stream() + .filter(review -> buildingIds.contains(review.getBuildingId())) + .map(Review::toMeta) + .toList(); + } -public interface ReviewService { + public List getBuildingReviewList(String buildingId, Pageable pageable) { + List reviews = this.reviewRepository.getReviewByBuildingId(buildingId, pageable); + List response = reviews.stream().map(Review::toDetail).toList(); + return response; + } - List getHomeReviewList(String buildingId, String cityId, Pageable pageable); + public List getMyReviewList(Pageable pageable) { + List reviews = this.reviewRepository.getReviewByMemberId(getCurrentMemberId(), + pageable); + List response = reviews.stream().map(Review::toDetail).toList(); + return response; + } - List getBuildingReviewList(String buildingId, Pageable pageable); + public void registerReview(Create req) { + Review review = req.toReview(); + setCertification(review); + this.reviewRepository.save(review); + } - List getMyReviewList(Pageable pageable); + public void modifyReview(Modify req) { + Review review = getReviewWithAuthCheck(req.getReviewId()); + review.modify(req); + setCertification(review); + this.reviewRepository.save(review); + } - void registerReview(ReviewDto.Create req); + private void setCertification(Review review) { + // TODO:: member service, feign... param: getCurrentMemberId, response: String + List cert = Collections.emptyList(); + review.setCertification(cert); + } - void modifyReview(ReviewDto.Modify req); + public void deleteReview(String reviewId) { + Review review = getReviewWithAuthCheck(reviewId); + this.reviewRepository.delete(review); + } - void deleteReview(String reviewId); + private Review getReviewWithAuthCheck(String reviewId) { + Review review = this.reviewRepository.findById(reviewId) + .orElseThrow(() -> new NotFoundException( + ResponseType.REVIEW_NOT_EXIST)); + if (!review.getMemberId().equals(getCurrentMemberId())) { + throw new BadRequestException(ResponseType.REVIEW_NOT_AUTHOR); + } + return review; + } } diff --git a/src/main/java/com/ftw/hometerview/review/service/ReviewServiceFacade.java b/src/main/java/com/ftw/hometerview/review/service/ReviewServiceFacade.java new file mode 100644 index 0000000..0bab94f --- /dev/null +++ b/src/main/java/com/ftw/hometerview/review/service/ReviewServiceFacade.java @@ -0,0 +1,44 @@ +package com.ftw.hometerview.review.service; + +import com.ftw.hometerview.place.service.BuildingService; +import com.ftw.hometerview.review.controller.dto.ReviewDto.Create; +import com.ftw.hometerview.review.controller.dto.ReviewDto.Detail; +import com.ftw.hometerview.review.controller.dto.ReviewDto.Meta; +import com.ftw.hometerview.review.controller.dto.ReviewDto.Modify; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +@RequiredArgsConstructor +@Service +public class ReviewServiceFacade { + + private final ReviewService reviewService; + private final BuildingService buildingService; + + public List getHomeReviewList(String companyId, String cityId, Pageable pageable) { + List buildingIds = this.buildingService.getBuildingsByCity(cityId); + return this.reviewService.getHomeReviewList(companyId, pageable, buildingIds); + } + + public List getBuildingReviewList(String buildingId, Pageable pageable) { + return this.reviewService.getBuildingReviewList(buildingId, pageable); + } + + public List getMyReviewList(Pageable pageable) { + return this.reviewService.getMyReviewList(pageable); + } + + public void registerReview(Create req) { + this.reviewService.registerReview(req); + } + + public void modifyReview(Modify req) { + this.reviewService.modifyReview(req); + } + + public void deleteReview(String reviewId) { + this.reviewService.deleteReview(reviewId); + } +} diff --git a/src/main/java/com/ftw/hometerview/review/service/ReviewServiceImpl.java b/src/main/java/com/ftw/hometerview/review/service/ReviewServiceImpl.java deleted file mode 100644 index 49f7be8..0000000 --- a/src/main/java/com/ftw/hometerview/review/service/ReviewServiceImpl.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.ftw.hometerview.review.service; - -import static com.ftw.hometerview.core.interceptor.AuthUtil.getCurrentMemberId; - -import com.ftw.hometerview.core.domain.ResponseType; -import com.ftw.hometerview.core.exception.BadRequestException; -import com.ftw.hometerview.core.exception.NotFoundException; -import com.ftw.hometerview.review.controller.dto.ReviewDto; -import com.ftw.hometerview.review.controller.dto.ReviewDto.Create; -import com.ftw.hometerview.review.controller.dto.ReviewDto.Detail; -import com.ftw.hometerview.review.controller.dto.ReviewDto.Meta; -import com.ftw.hometerview.review.controller.dto.ReviewDto.Modify; -import com.ftw.hometerview.review.domain.Review; -import com.ftw.hometerview.review.repository.ReviewRepository; -import java.util.Collections; -import java.util.List; -import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; - -@RequiredArgsConstructor -@Service -public class ReviewServiceImpl implements ReviewService { - - private final ReviewRepository reviewRepository; - - @Override - public List getHomeReviewList(String buildingId, String cityId, Pageable pageable) { - List reviews = this.reviewRepository.getReviewByBuildingId(buildingId, pageable); - List buildingIds = Collections.emptyList(); - // TODO:: buildingservice.getbuildingIds(cityId); - reviews = reviews.stream() - .filter(review -> buildingIds.contains(review.getBuildingId())) - .toList(); - List response = reviews.stream().map(Review::toMeta).toList(); - return response; - } - - @Override - public List getBuildingReviewList(String buildingId, Pageable pageable) { - List reviews = this.reviewRepository.getReviewByBuildingId(buildingId, pageable); - List response = reviews.stream().map(Review::toDetail).toList(); - return response; - } - - @Override - public List getMyReviewList(Pageable pageable) { - List reviews = this.reviewRepository.getReviewByMemberId(getCurrentMemberId(), - pageable); - List response = reviews.stream().map(Review::toDetail).toList(); - return response; - } - - @Override - public void registerReview(Create req) { - Review review = req.toReview(); - setCertification(review); - this.reviewRepository.save(review); - } - - @Override - public void modifyReview(Modify req) { - Review review = getReviewWithAuthCheck(req.getReviewId()); - review.modify(req); - setCertification(review); - this.reviewRepository.save(review); - } - - private void setCertification(Review review) { - // TODO:: member service, feign... param: getCurrentMemberId, response: String - List cert = Collections.emptyList(); - review.setCertification(cert); - } - - @Override - public void deleteReview(String reviewId) { - Review review = getReviewWithAuthCheck(reviewId); - this.reviewRepository.delete(review); - } - - private Review getReviewWithAuthCheck(String reviewId) { - Review review = this.reviewRepository.findById(reviewId) - .orElseThrow(() -> new NotFoundException( - ResponseType.REVIEW_NOT_EXIST)); - if (!review.getMemberId().equals(getCurrentMemberId())) { - throw new BadRequestException(ResponseType.REVIEW_NOT_AUTHOR); - } - return review; - } - -}