Skip to content

Commit

Permalink
Merge pull request #26 from FinalDoubleTen/develop
Browse files Browse the repository at this point in the history
Docs : Swagger 누락된 부분 추가 작성
  • Loading branch information
kdjun99 authored Dec 29, 2023
2 parents 180befb + a7fc7ac commit a5fa269
Show file tree
Hide file tree
Showing 11 changed files with 51 additions and 37 deletions.
2 changes: 1 addition & 1 deletion src/main/java/org/tenten/tentenbe/config/WebConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:3000")
.allowedOrigins("http://localhost:5173")
.allowedMethods("GET", "POST", "PATCH", "DELETE", "HEAD", "OPTIONS", "PUT")
.allowCredentials(true)
.allowedHeaders("*")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package org.tenten.tentenbe.domain.comment.dto.response;

import java.util.List;
import org.springframework.data.domain.Page;

public record CommentResponse(
List<CommentInfo> comments
Page<CommentInfo> comments
) {
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package org.tenten.tentenbe.domain.comment.repository;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.tenten.tentenbe.domain.comment.model.Comment;

import java.util.List;

public interface CommentRepository extends JpaRepository<Comment, Long> {
List<Comment> findCommentsByReviewId(Long reviewId);
Page<Comment> findCommentsByReviewId(Long reviewId, Pageable pageable);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
Expand All @@ -13,12 +10,8 @@
import org.tenten.tentenbe.domain.member.dto.request.MemberUpdateRequest;
import org.tenten.tentenbe.domain.member.dto.response.MemberResponse;
import org.tenten.tentenbe.domain.member.service.MemberService;
import org.tenten.tentenbe.domain.review.dto.response.MemberReviewResponse;
import org.tenten.tentenbe.domain.review.dto.response.ReviewInfo;
import org.tenten.tentenbe.domain.review.dto.response.ReviewResponse;
import org.tenten.tentenbe.domain.tour.dto.response.TourResponse;
import org.tenten.tentenbe.domain.tour.dto.response.TourSimpleResponse;
import org.tenten.tentenbe.domain.trip.dto.response.TripResponse;
import org.tenten.tentenbe.domain.trip.dto.response.TripSimpleResponse;
import org.tenten.tentenbe.global.response.GlobalDataResponse;
import org.tenten.tentenbe.global.response.GlobalResponse;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.tenten.tentenbe.domain.comment.dto.response.CommentResponse;
Expand Down Expand Up @@ -63,17 +64,18 @@ public ResponseEntity<GlobalResponse> deleteReview(
@GetMapping("/{reviewId}/comments")
public ResponseEntity<GlobalDataResponse<CommentResponse>> getReviewDetail(
@Parameter(name = "reviewId", description = "조회할 리뷰 아이디", in = PATH)
@PathVariable("reviewId") Long reviewId) {
return ResponseEntity.ok(GlobalDataResponse.ok(SUCCESS, reviewService.getReviewComments(reviewId)));
@PathVariable("reviewId") Long reviewId, Pageable pageable) {

return ResponseEntity.ok(GlobalDataResponse.ok(SUCCESS, reviewService.getReviewComments(reviewId, pageable)));
}

@Operation(summary = "리뷰 키워드 조회 API", description = "리뷰 작성시, 전체 키워드 혹은 상품 타입별 조회 API 입니다.")
@Operation(summary = "리뷰 작성시 키워드 조회 API", description = "리뷰 작성시, 전체 키워드 혹은 조회 하고 싶은 키워드 타입별 키워드 목록 조회 API 입니다.")
@GetMapping("/keywords")
public ResponseEntity<GlobalDataResponse<KeywordResponse>> getKeywords(
@Parameter(name = "code", description = "여행 상품 타입, ex) 32 - 숙박, 39 - 식당, 12 - 관광지", in = QUERY)
@RequestParam(name = "code", required = false)
Long code
@Parameter(name = "keywordType", description = "조회하고 싶은 키워드 타입, ex) ACCOMMODATION - 숙박, DINING - 식당, ATTRACTION - 관광지", in = QUERY)
@RequestParam(name = "keywordType", required = false)
String keywordType
) {
return ResponseEntity.ok(GlobalDataResponse.ok(SUCCESS, reviewService.getKeywords(code)));
return ResponseEntity.ok(GlobalDataResponse.ok(SUCCESS, reviewService.getKeywords(keywordType)));
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.tenten.tentenbe.domain.review.dto.response;

import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.data.domain.Page;

import java.util.List;

Expand All @@ -11,7 +12,7 @@ public record ReviewResponse(
Long reviewTotalCount,
@Schema(defaultValue = "10")
Long keywordTotalCount,
List<ReviewInfo> reviewInfos,
Page<ReviewInfo> reviewInfos,
List<TourKeywordInfo> tourKeywordInfos
) {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.tenten.tentenbe.domain.review.repository;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
Expand All @@ -10,5 +12,5 @@

public interface ReviewRepository extends JpaRepository<Review, Long> {
@Query("SELECT r FROM Review r JOIN FETCH r.reviewKeywords rk JOIN FETCH rk.keyword WHERE r.tourItem.id = :tourItemId")
List<Review> findReviewByTourItemId(@Param("tourItemId") Long tourItemId);
Page<Review> findReviewByTourItemId(@Param("tourItemId") Long tourItemId, Pageable pageable);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package org.tenten.tentenbe.domain.review.service;

import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.tenten.tentenbe.domain.comment.dto.response.CommentInfo;
Expand Down Expand Up @@ -41,20 +44,21 @@ public class ReviewService {
private final KeywordRepository keywordRepository;
private final ReviewKeywordRepository reviewKeywordRepository;
private final CommentRepository commentRepository;
@Transactional(readOnly = true)
public ReviewResponse getTourReviews(Long tourItemId) {
@Transactional(readOnly = true) // TODO: tourItem.getReviews fetchJoin으로 한번에 가져오게 리팩터링
public ReviewResponse getTourReviews(Long tourItemId, Pageable pageable) {
TourItem tourItem = tourItemRepository.findById(tourItemId)
.orElseThrow(() -> new TourException("해당 아이디로 존재하는 리뷰가 없습니다. tourItemId : " + tourItemId, NOT_FOUND));
List<Review> reviews = reviewRepository.findReviewByTourItemId(tourItem.getId());
Page<Review> reviewPage = reviewRepository.findReviewByTourItemId(tourItem.getId(), pageable);
List<ReviewInfo> reviewInfos = reviewPage.stream().map(ReviewInfo::fromEntity).toList();

Long reviewTotalCount = (long) reviews.size();
long reviewTotalCount = tourItem.getReviews().size();
Long keywordTotalCount = calculateKeywordTotalCount(tourItem.getId());
Double ratingAverage = calculateRatingAverage(reviews);
Double ratingAverage = calculateRatingAverage(tourItem.getReviews());
return new ReviewResponse(
ratingAverage,
reviewTotalCount,
keywordTotalCount,
reviews.stream().map(ReviewInfo::fromEntity).toList(),
new PageImpl<>(reviewInfos, pageable, reviewTotalCount),
keywordRepository.findKeywordInfoByTourItemId(tourItem.getId())
);
}
Expand Down Expand Up @@ -137,18 +141,19 @@ public void deleteReview(Long memberId, Long reviewId) {
}

@Transactional(readOnly = true)
public CommentResponse getReviewComments(Long reviewId) {
List<Comment> comments = commentRepository.findCommentsByReviewId(reviewId);
public CommentResponse getReviewComments(Long reviewId, Pageable pageable) {
Page<Comment> comments = commentRepository.findCommentsByReviewId(reviewId, pageable);
List<CommentInfo> commentInfos = comments.stream().map(comment -> new CommentInfo(comment.getId(), comment.getCreator().getNickname(), comment.getCreator().getProfileImageUrl(), comment.getContent(), comment.getCreatedTime())).toList();

return new CommentResponse(comments.stream().map(comment -> new CommentInfo(comment.getId(), comment.getCreator().getNickname(), comment.getCreator().getProfileImageUrl(), comment.getContent(), comment.getCreatedTime())).toList());
return new CommentResponse(new PageImpl<>(commentInfos, pageable, comments.getTotalElements()));
}

@Transactional(readOnly = true)
public KeywordResponse getKeywords(Long code) {
if (code == null) {
public KeywordResponse getKeywords(String keywordTypeName) {
if (keywordTypeName == null) {
return new KeywordResponse(keywordRepository.findAll().stream().map(KeywordInfo::fromEntity).toList());
} else {
KeywordType keywordType = KeywordType.fromCode(code);
KeywordType keywordType = KeywordType.fromName(keywordTypeName);
return new KeywordResponse(keywordRepository.findByType(keywordType).stream().map(KeywordInfo::fromEntity).toList());

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public ResponseEntity<GlobalDataResponse<Page<TourSimpleResponse>>> getTours(
public ResponseEntity<GlobalDataResponse<Page<TourSimpleResponse>>> searchTours(
@Parameter(name = "region", description = "검색할 지역", in = QUERY, required = true)
@RequestParam(value = "region", required = true) String region,
@Parameter(name = "type", description = "검색할 여행 상품 타입, 미지정 가능", in = QUERY, required = false)
@Parameter(name = "category", description = "검색할 여행 상품 타입, 미지정 가능", in = QUERY, required = false)
@RequestParam(value = "category", required = false) String category,
@Parameter(name = "searchWord", description = "검색할 상품명", in = QUERY, required = true)
@RequestParam(value = "searchWord", required = true) String searchWord,
Expand Down Expand Up @@ -95,9 +95,9 @@ public ResponseEntity<GlobalDataResponse<TourDetailResponse>> getTourDetail(

@Operation(summary = "여행 상품 리뷰 조회 API", description = "여행 상품 리뷰 & 키워드 조회 API 입니다")
@GetMapping("/{tourItemId}/reviews")
public ResponseEntity<GlobalDataResponse<ReviewResponse>> getTourReviews(@PathVariable(name = "tourItemId") Long tourItemId) {
public ResponseEntity<GlobalDataResponse<ReviewResponse>> getTourReviews(@PathVariable(name = "tourItemId") Long tourItemId, Pageable pageable) {
return ResponseEntity.ok(GlobalDataResponse
.ok(SUCCESS, reviewService.getTourReviews(tourItemId)));
.ok(SUCCESS, reviewService.getTourReviews(tourItemId, pageable)));
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.tenten.tentenbe.domain.trip.dto.response;

import java.util.List;
import org.springframework.data.domain.Page;

public record TripResponse(List<TripSimpleResponse> trips) {
public record TripResponse(Page<TripSimpleResponse> trips) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,13 @@ public static KeywordType fromCode(Long code) {
}
throw new KeywordException("주어진 코드로 존재하는 키워드가 없습니다." + code, NOT_FOUND);
}

public static KeywordType fromName(String name) {
for (KeywordType keywordType : KeywordType.values()) {
if (keywordType.getName().equals(name)) {
return keywordType;
}
}
throw new KeywordException("주어진 이름으로 존재하는 키워드가 없습니다." + name, NOT_FOUND);
}
}

0 comments on commit a5fa269

Please sign in to comment.