diff --git a/.gitignore b/.gitignore index 78ce332e..633f67dc 100644 --- a/.gitignore +++ b/.gitignore @@ -43,4 +43,6 @@ out/ /eat-ssu.tar ### env file ### -.env \ No newline at end of file +.env + +/src/main/resources/application-local.yml \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index e81d16d2..2566ecec 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -45,6 +45,11 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha String requestURI = httpRequest.getRequestURI(); if (isWhiteListed(requestURI)) { + String token = resolveToken(httpRequest); + if (token != null && jwtTokenProvider.validateToken(token)) { + Authentication authentication = jwtTokenProvider.getAuthentication(token); + SecurityContextHolder.getContext().setAuthentication(authentication); + } chain.doFilter(request, response); return; } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java index 482cb4dc..00cd0b87 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java @@ -32,29 +32,6 @@ public Double getMainRatingAverage(Long mealId) { .fetchOne(); } - public Double getTasteRatingAverage(Long mealId) { - List menuIds = mealMenuQueryRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.tasteRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } - - public Double getAmountRatingAverage(Long mealId) { - List menuIds = mealMenuQueryRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.amountRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } private BooleanExpression menuIdIn(List menuIds) { return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java index 97e33f81..0d8b2843 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java @@ -26,27 +26,7 @@ public Double getMainRatingAverage(Long menuId) { .fetchOne(); } - public Double getTasteRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.tasteRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } - public Double getAmountRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.amountRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } private BooleanExpression menuIdEq(Long menuId) { return menu.id.eq(menuId); diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java index efec513b..f510ec2b 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java @@ -27,10 +27,10 @@ public static PartnershipInfo fromEntity(Partnership partnership, .description(partnership.getDescription()) .startDate(partnership.getStartDate()) .endDate(partnership.getEndDate()) - .collegeName(partnership.getPartnershipCollege() == null ? null : partnership.getPartnershipCollege() - .getName()) - .departmentName(partnership.getPartnershipDepartment() == null ? null : partnership.getPartnershipDepartment() - .getName()) + .collegeName(partnership.getPartnershipCollege() == null && partnership.getPartnershipDepartment() == null + ? "총학" + : (partnership.getPartnershipCollege() != null ? partnership.getPartnershipCollege().getName() : null)) + .departmentName(partnership.getPartnershipDepartment() != null ? partnership.getPartnershipDepartment().getName() : null) .likeCount(restaurant.getLikes() != null ? restaurant.getLikes().size() : 0) .isLiked(isLiked) .build(); diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java index 549b857c..04d75720 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java @@ -3,7 +3,7 @@ public enum RestaurantType { RESTAURANT("음식점"), CAFE("카페"), - BEER("주점"); + PUB("주점"); private final String type; diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java index 2ab491ff..15799202 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -12,18 +12,20 @@ public interface PartnershipRepository extends JpaRepository { @Query(""" - select distinct pr - from PartnershipRestaurant pr - join fetch pr.partnerships p - left join fetch p.partnershipCollege pc - left join fetch p.partnershipDepartment pd - where - (pc = :college - or pd = :department - or (pc is not null and pc.name = '총학')) - and p.startDate <= current_date - and (p.endDate is null or p.endDate >= current_date) - """) + select distinct pr + from PartnershipRestaurant pr + join fetch pr.partnerships p + left join fetch p.partnershipCollege pc + left join fetch p.partnershipDepartment pd + where + ( + pc = :college + or pd = :department + or (pc is null and pd is null) + ) + and p.startDate <= current_date + and (p.endDate is null or p.endDate >= current_date) + """) List findRestaurantsWithMyPartnerships( @Param("college") College college, @Param("department") Department department diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java index 11572cd5..31166af8 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java @@ -34,12 +34,10 @@ public RatingAverages mealAverageRatings(Meal meal) { long totalReviewCount = mealTotalReviewCount(meal); if (totalReviewCount == 0) - return new RatingAverages(null, null, null); + return new RatingAverages(null); return RatingAverages.builder() .mainRating(averageRating(mealTotalMainRating(meal), totalReviewCount)) - .amountRating(averageRating(mealTotalAmountRating(meal), totalReviewCount)) - .tasteRating(averageRating(mealTotalTasteRating(meal), totalReviewCount)) .build(); } @@ -48,13 +46,11 @@ public RatingAverages menuAverageRatings(Menu menu) { int totalReviewCount = menu.getTotalReviewCount(); if (totalReviewCount == 0) { - return new RatingAverages(null, null, null); + return new RatingAverages(null); } return RatingAverages.builder() .mainRating(averageRating(menuTotalMainRating(menu), totalReviewCount)) - .amountRating(averageRating(menuTotalAmountRating(menu), totalReviewCount)) - .tasteRating(averageRating(menuTotalTasteRating(menu), totalReviewCount)) .build(); } @@ -101,35 +97,11 @@ public Integer mealTotalMainRating(Meal meal) { .reduce(null, this::sum); } - // 식단 양 평점 총합 - public Integer mealTotalAmountRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalAmountRating()) - .reduce(null, this::sum); - } - - // 식단 맛 평점 총합 - public Integer mealTotalTasteRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalTasteRating()) - .reduce(null, this::sum); - } // 메뉴 메인 평점 총합 public Integer menuTotalMainRating(Menu menu) { return menu.getReviews().getTotalMainRating(); } - // 메뉴 양 평점 총합 - public Integer menuTotalAmountRating(Menu menu) { - return menu.getReviews().getTotalAmountRating(); - } - - // 메뉴 맛 평점 총합 - public Integer menuTotalTasteRating(Menu menu) { - return menu.getReviews().getTotalTasteRating(); - } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java index c5fadaac..f6ce4870 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java @@ -42,18 +42,14 @@ public RatingAverages mealAverageRatings(Meal meal) { long totalReviewCount = mealTotalReviewCount(meal); if (totalReviewCount == 0) - return new RatingAverages(null, null, null); + return new RatingAverages(null); Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); Integer totalMainRating = mealRatings.stream().mapToInt(RatingsDto::getMainRating).sum(); - Integer totalTasteRating = mealRatings.stream().mapToInt(RatingsDto::getTasteRating).sum(); - Integer totalAmountRating = mealRatings.stream().mapToInt(RatingsDto::getAmountRating).sum(); return RatingAverages.builder() .mainRating(averageRating(totalMainRating, totalReviewCount)) - .tasteRating(averageRating(totalTasteRating, totalReviewCount)) - .amountRating(averageRating(totalAmountRating, totalReviewCount)) .build(); } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java index 99bd8253..c0ac2de7 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java @@ -12,20 +12,12 @@ public class Ratings { private Integer mainRating; - private Integer amountRating; - - private Integer tasteRating; - - private Ratings(Integer mainRating, Integer amountRating, Integer tasteRating) { + private Ratings(Integer mainRating) { Assert.isTrue(mainRating >= 0 && mainRating <= 5, "mainRating must be between 0 and 5"); - Assert.isTrue(amountRating >= 0 && amountRating <= 5, "amountRating must be between 0 and 5"); - Assert.isTrue(tasteRating >= 0 && tasteRating <= 5, "tasteRating must be between 0 and 5"); this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; } - public static Ratings of(Integer mainRating, Integer amountRating, Integer tasteRating) { - return new Ratings(mainRating, amountRating, tasteRating); + public static Ratings of(Integer mainRating) { + return new Ratings(mainRating); } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java index 3a39d4ea..2a50f46f 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java @@ -21,13 +21,6 @@ public class CreateMenuReviewRequest { private Long menuId; @Schema(description = "평점-메인", example = "4") private Integer mainRating; - - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - @Max(150) @Schema(description = "한줄평", example = "맛있어용") private String content; @@ -36,19 +29,8 @@ public class CreateMenuReviewRequest { private String imageUrl; private MenuLikeRequest menuLike; - public CreateMenuReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { - Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); - this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; - this.content = content; - } - public Review toReviewEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + Ratings ratings = Ratings.of(this.mainRating); return Review.builder() .user(user) .content(this.content) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java index 05ba5a92..bf4ee05e 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java @@ -37,8 +37,6 @@ public static MealReviewsResponse of(Long totalReviewCount, List menuNam return MealReviewsResponse.builder() .menuNames(menuNames) .mainRating(ratingAverages.mainRating()) - .amountRating(ratingAverages.amountRating()) - .tasteRating(ratingAverages.tasteRating()) .totalReviewCount(totalReviewCount) .reviewRatingCount(reviewRatingCount) .build(); diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java index 1042f12c..b35c19df 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java @@ -10,6 +10,6 @@ public class MenuLikeRequest { @Schema(description = "메뉴 식별자", example = "123") private Long menuId; - @Schema(description = "좋아요 or 싫어요", example = "좋아요 : true or 싫어요 : false") + @Schema(description = "좋아요 선택", example = "좋아요 : true (기본값은 false)") private Boolean isLike; } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java index 77056b7a..acd2d38b 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java @@ -37,8 +37,6 @@ public static MenuReviewResponse of(Menu menu, .menuName(menu.getName()) .totalReviewCount(menu.getTotalReviewCount()) .mainRating(ratingAverages.mainRating()) - .amountRating(ratingAverages.amountRating()) - .tasteRating(ratingAverages.tasteRating()) .reviewRatingCount(reviewRatingCount) .build(); } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java index d96d03eb..3a2779bd 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java @@ -2,7 +2,7 @@ import lombok.Builder; -public record RatingAverages(Double mainRating, Double amountRating, Double tasteRating) { +public record RatingAverages(Double mainRating) { @Builder public RatingAverages { diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java index dab7e5f5..bb7a4e37 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java @@ -8,12 +8,5 @@ public Integer getMainRating() { return ratings.getMainRating(); } - public Integer getTasteRating() { - return ratings.getTasteRating(); - } - - public Integer getAmountRating() { - return ratings.getAmountRating(); - } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java index 6843b8cc..f6552e31 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java @@ -31,19 +31,15 @@ public class ReviewCreateRequest { @Schema(description = "한줄평", example = "맛있어용") private String content; - public ReviewCreateRequest(int mainRating, int amountRating, int tasteRating, String content) { + public ReviewCreateRequest(int mainRating, String content) { Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; this.content = content; } public Review toEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + Ratings ratings = Ratings.of(this.mainRating); return Review.builder() .user(user) .content(this.content) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java index 40eb70b5..0d196d27 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java @@ -56,8 +56,6 @@ public static ReviewDetail from(Review review, Long userId) { ReviewDetailBuilder builder = ReviewDetail.builder() .reviewId(review.getId()) .mainRating(review.getRatings().getMainRating()) - .amountRating(review.getRatings().getAmountRating()) - .tasteRating(review.getRatings().getTasteRating()) .writedAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imageUrls) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index facbdead..b9325e0f 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -2,9 +2,9 @@ import ssu.eatssu.domain.review.entity.Review; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 @@ -15,18 +15,22 @@ public record ReviewRatingCount(long oneStarCount, long twoStarCount, long three } public static ReviewRatingCount from(List reviews) { - Map ratingDistribution = reviews.stream() - .filter(r -> r.getRating() != null) - .collect(Collectors.groupingBy(Review::getRating, - LinkedHashMap::new, - Collectors.counting())); + Map countsByStar = reviews.stream() + .map(r -> { + Integer main = (r.getRatings() != null) ? r.getRatings() + .getMainRating() : null; + return (main != null) ? main : r.getRating(); + }) + .filter(Objects::nonNull) + .collect(Collectors.groupingBy(Integer::intValue, + Collectors.counting())); return new ReviewRatingCount( - ratingDistribution.getOrDefault(1, 0L), - ratingDistribution.getOrDefault(2, 0L), - ratingDistribution.getOrDefault(3, 0L), - ratingDistribution.getOrDefault(4, 0L), - ratingDistribution.getOrDefault(5, 0L) + countsByStar.getOrDefault(1, 0L), + countsByStar.getOrDefault(2, 0L), + countsByStar.getOrDefault(3, 0L), + countsByStar.getOrDefault(4, 0L), + countsByStar.getOrDefault(5, 0L) ); } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java index 20890cee..e107f306 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java @@ -21,12 +21,6 @@ public class UploadReviewRequest { @Schema(description = "평점-메인", example = "4") private Integer mainRating; - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - @Max(150) @Schema(description = "한줄평", example = "맛있어용") private String content; @@ -34,19 +28,15 @@ public class UploadReviewRequest { @Schema(description = "리뷰 이미지 URL", example = "https://s3.~~~.jpg") private String imageUrl; - public UploadReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { + public UploadReviewRequest(int mainRating, String content) { Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; this.content = content; } public Review toReviewEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + Ratings ratings = Ratings.of(this.mainRating); return Review.builder() .user(user) .content(this.content) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java index 6cc2a4a2..494ba5a0 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import java.util.List; @@ -15,6 +16,17 @@ @AllArgsConstructor public class ValidMenuForViewResponse { @Schema(description = "리뷰에 포함되는 메뉴 리스트", example = "[김치볶음밥, 고구마치즈돈까스, 김자반]") - private List menuList; + private List menuList; + + @Getter + @Builder + @AllArgsConstructor + public static class MenuDto { + @Schema(description = "메뉴 ID", example = "3143") + private Long menuId; + + @Schema(description = "메뉴 이름", example = "우삼겹갈비탕") + private String name; + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index ce98406d..7afffaf6 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -74,9 +74,9 @@ public class Review extends BaseTimeEntity { @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) private List reviewLikes = new ArrayList<>(); - public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { + public void update(String content, Integer mainRate) { this.content = content; - this.ratings = Ratings.of(mainRate, amountRate, tasteRate); + this.ratings = Ratings.of(mainRate); } // TODO : this.user가 null이면? diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java index 183d663c..3c69beb0 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java @@ -42,19 +42,5 @@ public int getTotalMainRating() { .mapToInt(review -> review.getRatings().getMainRating()) .sum(); } - - public int getTotalAmountRating() { - return this.reviews.stream() - .filter(review -> review.getRatings() != null) - .mapToInt(review -> review.getRatings().getAmountRating()) - .sum(); - } - - public int getTotalTasteRating() { - return this.reviews.stream() - .filter(review -> review.getRatings() != null) - .mapToInt(review -> review.getRatings().getTasteRating()).sum(); - } - } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java index cf422bc9..a7de63fc 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java @@ -38,17 +38,13 @@ public ReviewRatingCount menuRatingCount(Menu menu) { @Override public RatingAverages mealAverageRatings(Meal meal) { Double mainRatingAverage = mealRatingCalculator.getMainRatingAverage(meal.getId()); - Double amountRatingAverage = mealRatingCalculator.getAmountRatingAverage(meal.getId()); - Double tasteRatingAverage = mealRatingCalculator.getTasteRatingAverage(meal.getId()); - return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); + return new RatingAverages(mainRatingAverage); } @Override public RatingAverages menuAverageRatings(Menu menu) { Double mainRatingAverage = menuRatingCalculator.getMainRatingAverage(menu.getId()); - Double amountRatingAverage = menuRatingCalculator.getAmountRatingAverage(menu.getId()); - Double tasteRatingAverage = menuRatingCalculator.getTasteRatingAverage(menu.getId()); - return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); + return new RatingAverages(mainRatingAverage); } @Override diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index 5e62ce31..47c550ee 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -132,8 +132,7 @@ public void updateReview(CustomUserDetails userDetails, Long reviewId, throw new BaseException(REVIEW_PERMISSION_DENIED); } - review.update(request.content(), request.mainRating(), request.amountRating(), - request.tasteRating()); + review.update(request.content(), request.mainRating()); } public void deleteReview(CustomUserDetails userDetails, Long reviewId) { diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 56c04f16..3950faf1 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -35,7 +35,6 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; -import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -115,8 +114,11 @@ public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { Double averageRating = Optional.ofNullable(reviews) .orElse(Collections.emptyList()) .stream() - .filter(Objects::nonNull) - .map(Review::getRating) + .map(r -> { + Integer main = (r.getRatings() != null) ? r.getRatings() + .getMainRating() : null; + return (main != null) ? main : r.getRating(); + }) .filter(Objects::nonNull) .mapToInt(Integer::intValue) .average() @@ -230,8 +232,11 @@ public MenuReviewsV2Response findMenuReviews(Long menuId) { double averageRating = Optional.ofNullable(reviews) .orElse(Collections.emptyList()) .stream() - .filter(Objects::nonNull) - .map(Review::getRating) + .map(r -> { + Integer main = (r.getRatings() != null) ? r.getRatings() + .getMainRating() : null; + return (main != null) ? main : r.getRating(); + }) .filter(Objects::nonNull) .mapToInt(Integer::intValue) .average() @@ -241,6 +246,7 @@ public MenuReviewsV2Response findMenuReviews(Long menuId) { ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + return MenuReviewsV2Response .builder() .menuName(menu.getName()) @@ -262,8 +268,11 @@ public MealReviewsV2Response findMealReviews(Long mealId) { Double averageRating = Optional.ofNullable(reviews) .orElse(Collections.emptyList()) .stream() - .filter(Objects::nonNull) - .map(Review::getRating) + .map(r -> { + Integer main = (r.getRatings() != null) ? r.getRatings() + .getMainRating() : null; + return (main != null) ? main : r.getRating(); + }) .filter(Objects::nonNull) .mapToInt(Integer::intValue) .average() @@ -372,16 +381,22 @@ public SliceResponse findMyReviews(CustomUserDetails userD public ValidMenuForViewResponse validMenuForReview(Long mealId) { - Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - List menuNames = meal.getMenuNames(); - List validMenuNames = new ArrayList<>(); - for (String menu : menuNames) { - if (!MenuFilterUtil.isExcludedFromReview(menu)) { - validMenuNames.add(menu); - } - } + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + + List menus = mealMenuRepository.findMenusByMeal(meal); + + List validMenus = menus.stream() + .filter(menu -> !MenuFilterUtil.isExcludedFromReview( + menu.getName())) + .map(menu -> ValidMenuForViewResponse.MenuDto.builder() + .menuId(menu.getId()) + .name(menu.getName()) + .build()) + .collect(Collectors.toList()); return ValidMenuForViewResponse.builder() - .menuList(validMenuNames).build(); + .menuList(validMenus) + .build(); } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java index e45d05e3..2d538487 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java @@ -53,13 +53,9 @@ public static MyReviewDetail from(Review review) { Ratings ratings = review.getRatings(); int mainRating = 0; - int amountRating = 0; - int tasteRating = 0; if (ratings != null) { mainRating = ratings.getMainRating() != null ? ratings.getMainRating() : 0; - amountRating = ratings.getAmountRating() != null ? ratings.getAmountRating() : 0; - tasteRating = ratings.getTasteRating() != null ? ratings.getTasteRating() : 0; } String menuName = review.getMenu() != null ? review.getMenu().getName() : null; @@ -68,8 +64,6 @@ public static MyReviewDetail from(Review review) { return MyReviewDetail.builder() .reviewId(review.getId()) .mainRating(mainRating) - .amountRating(amountRating) - .tasteRating(tasteRating) .writeDate(writeDate) .content(review.getContent()) .imgUrlList(imgUrlList) diff --git a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java index b2011705..9c22ba6a 100644 --- a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java @@ -85,7 +85,7 @@ void setup() { private Review 리뷰_생성_요청(CustomUserDetails userDetails) { // given Menu menu = createMenu(); - ReviewCreateRequest request = new ReviewCreateRequest(4, 4, 4, "굿"); + ReviewCreateRequest request = new ReviewCreateRequest(4, "굿"); // when Review createdReview = reviewService.createReview(userDetails, menu.getId(),