diff --git a/src/main/java/org/prography/kagongsillok/common/utils/CustomListUtils.java b/src/main/java/org/prography/kagongsillok/common/utils/CustomListUtils.java index d1fd410..3189aa4 100644 --- a/src/main/java/org/prography/kagongsillok/common/utils/CustomListUtils.java +++ b/src/main/java/org/prography/kagongsillok/common/utils/CustomListUtils.java @@ -9,6 +9,8 @@ @UtilityClass public class CustomListUtils { + private static final int minimumImageSize = 1; + public static List mapTo(final List list, final Function mappingFunction) { if (isEmpty(list)) { return List.of(); @@ -35,8 +37,8 @@ public static boolean isEmpty(final List list) { } public static String joiningToString(final List list, final String delimiter) { - if (list.size() < 1) { - return null; + if (list.size() < minimumImageSize) { + return ""; } return list.stream() .map(Object::toString) diff --git a/src/main/java/org/prography/kagongsillok/image/infrastructure/ImageRepositoryCustom.java b/src/main/java/org/prography/kagongsillok/image/infrastructure/ImageRepositoryCustom.java index f47c35a..d6cb0cf 100644 --- a/src/main/java/org/prography/kagongsillok/image/infrastructure/ImageRepositoryCustom.java +++ b/src/main/java/org/prography/kagongsillok/image/infrastructure/ImageRepositoryCustom.java @@ -8,6 +8,5 @@ public interface ImageRepositoryCustom { Map findByIdInToMap(List imageIds); - boolean isExistIdIn(final List imageIds); - + boolean isNotExistIdIn(final List imageIds); } diff --git a/src/main/java/org/prography/kagongsillok/image/infrastructure/ImageRepositoryImpl.java b/src/main/java/org/prography/kagongsillok/image/infrastructure/ImageRepositoryImpl.java index 084ea98..aab8ca9 100644 --- a/src/main/java/org/prography/kagongsillok/image/infrastructure/ImageRepositoryImpl.java +++ b/src/main/java/org/prography/kagongsillok/image/infrastructure/ImageRepositoryImpl.java @@ -35,7 +35,7 @@ public Map findByIdInToMap(final List imageIds) { } @Override - public boolean isExistIdIn(final List imageIds) { + public boolean isNotExistIdIn(final List imageIds) { List existImageIds = queryFactory .selectFrom(image) .where( diff --git a/src/main/java/org/prography/kagongsillok/member/domain/Member.java b/src/main/java/org/prography/kagongsillok/member/domain/Member.java index 151f5ba..0f6d6bd 100644 --- a/src/main/java/org/prography/kagongsillok/member/domain/Member.java +++ b/src/main/java/org/prography/kagongsillok/member/domain/Member.java @@ -45,6 +45,13 @@ public Member(final String nickname, final String email, final Role role, String this.loginHistory = LoginHistory.init(); } + public static Member defaultOf() { + return Member.builder() + .nickname("알 수 없음") + .email("Unknown@unknown.com") + .build(); + } + public String getEmail() { return email.getValue(); } diff --git a/src/main/java/org/prography/kagongsillok/place/application/PlaceService.java b/src/main/java/org/prography/kagongsillok/place/application/PlaceService.java index 6c15cbf..cf6e892 100644 --- a/src/main/java/org/prography/kagongsillok/place/application/PlaceService.java +++ b/src/main/java/org/prography/kagongsillok/place/application/PlaceService.java @@ -138,7 +138,7 @@ private List getReviewTagsRelatedToPlace(final List reviews) } private void checkExistImage(final List imageIds) { - if (imageRepository.isExistIdIn(imageIds)) { + if (imageRepository.isNotExistIdIn(imageIds)) { throw new NotFoundImageException(imageIds); } } diff --git a/src/main/java/org/prography/kagongsillok/place/application/dto/PlaceDto.java b/src/main/java/org/prography/kagongsillok/place/application/dto/PlaceDto.java index 41dfe4a..fb2df1f 100644 --- a/src/main/java/org/prography/kagongsillok/place/application/dto/PlaceDto.java +++ b/src/main/java/org/prography/kagongsillok/place/application/dto/PlaceDto.java @@ -7,10 +7,12 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.prography.kagongsillok.common.utils.CustomListUtils; +import org.prography.kagongsillok.image.application.dto.ImageDto; import org.prography.kagongsillok.image.domain.Image; import org.prography.kagongsillok.place.domain.BusinessHour; import org.prography.kagongsillok.place.domain.Link; import org.prography.kagongsillok.place.domain.Place; +import org.prography.kagongsillok.review.application.dto.ReviewTagDto; import org.prography.kagongsillok.review.domain.ReviewTag; @Getter @@ -22,11 +24,11 @@ public class PlaceDto { private String address; private Double latitude; private Double longitude; - private List images; + private List images; private String phone; private List links; private List businessHours; - private List reviewTags; + private List reviewTags; @Builder public PlaceDto( @@ -35,11 +37,11 @@ public PlaceDto( final String address, final Double latitude, final Double longitude, - final List images, + final List images, final String phone, final List links, final List businessHours, - final List reviewTags + final List reviewTags ) { this.id = id; this.name = name; @@ -73,7 +75,7 @@ public static PlaceDto of(final Place place, final List images) { .address(place.getAddress()) .latitude(place.getLatitude()) .longitude(place.getLongitude()) - .images(images) + .images(CustomListUtils.mapTo(images, ImageDto::from)) .phone(place.getPhone()) .links(CustomListUtils.mapTo(place.getLinks().getValues(), LinkDto::from)) .businessHours(CustomListUtils.mapTo(place.getBusinessHours().getValues(), BusinessHourDto::from)) @@ -87,11 +89,11 @@ public static PlaceDto of(final Place place,final List images, final List .address(place.getAddress()) .latitude(place.getLatitude()) .longitude(place.getLongitude()) - .images(images) + .images(CustomListUtils.mapTo(images, ImageDto::from)) .phone(place.getPhone()) .links(CustomListUtils.mapTo(place.getLinks().getValues(), LinkDto::from)) .businessHours(CustomListUtils.mapTo(place.getBusinessHours().getValues(), BusinessHourDto::from)) - .reviewTags(reviewTags) + .reviewTags(CustomListUtils.mapTo(reviewTags, ReviewTagDto::from)) .build(); } diff --git a/src/main/java/org/prography/kagongsillok/place/infrastructure/PlaceRepositoryCustom.java b/src/main/java/org/prography/kagongsillok/place/infrastructure/PlaceRepositoryCustom.java index 5071af2..3a722dc 100644 --- a/src/main/java/org/prography/kagongsillok/place/infrastructure/PlaceRepositoryCustom.java +++ b/src/main/java/org/prography/kagongsillok/place/infrastructure/PlaceRepositoryCustom.java @@ -1,6 +1,7 @@ package org.prography.kagongsillok.place.infrastructure; import java.util.List; +import java.util.Map; import org.prography.kagongsillok.place.domain.Location; import org.prography.kagongsillok.place.domain.Place; @@ -15,4 +16,6 @@ List findByLocationAround( List findByNameContains(final String name); List findByIdIn(final List placeIds); + + Map findByIdInToMap(final List placeIds); } diff --git a/src/main/java/org/prography/kagongsillok/place/infrastructure/PlaceRepositoryImpl.java b/src/main/java/org/prography/kagongsillok/place/infrastructure/PlaceRepositoryImpl.java index c974aa8..5a35210 100644 --- a/src/main/java/org/prography/kagongsillok/place/infrastructure/PlaceRepositoryImpl.java +++ b/src/main/java/org/prography/kagongsillok/place/infrastructure/PlaceRepositoryImpl.java @@ -5,7 +5,10 @@ import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.prography.kagongsillok.place.domain.Location; import org.prography.kagongsillok.place.domain.Place; @@ -66,6 +69,18 @@ public List findByIdIn(final List placeIds) { .fetch(); } + @Override + public Map findByIdInToMap(final List placeIds) { + return queryFactory + .selectFrom(place) + .where( + idIn(placeIds), + isNotDeleted() + ) + .stream() + .collect(Collectors.toMap(Place::getId, Function.identity())); + } + private BooleanExpression nameContains(final String name) { if (Objects.isNull(name)) { return null; diff --git a/src/main/java/org/prography/kagongsillok/place/ui/dto/PlaceResponse.java b/src/main/java/org/prography/kagongsillok/place/ui/dto/PlaceResponse.java index 275fccf..5aec13b 100644 --- a/src/main/java/org/prography/kagongsillok/place/ui/dto/PlaceResponse.java +++ b/src/main/java/org/prography/kagongsillok/place/ui/dto/PlaceResponse.java @@ -8,10 +8,12 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.prography.kagongsillok.common.utils.CustomListUtils; +import org.prography.kagongsillok.image.application.dto.ImageDto; import org.prography.kagongsillok.image.domain.Image; import org.prography.kagongsillok.place.application.dto.PlaceDto; import org.prography.kagongsillok.place.application.dto.PlaceDto.BusinessHourDto; import org.prography.kagongsillok.place.application.dto.PlaceDto.LinkDto; +import org.prography.kagongsillok.review.application.dto.ReviewTagDto; import org.prography.kagongsillok.review.domain.ReviewTag; @Getter @@ -23,11 +25,11 @@ public class PlaceResponse { private String address; private Double latitude; private Double longitude; - private List images; + private List images; private String phone; private List links; private List businessHours; - private List reviewTags; + private List reviewTags; @Builder public PlaceResponse( @@ -36,11 +38,11 @@ public PlaceResponse( final String address, final Double latitude, final Double longitude, - final List images, + final List images, final String phone, final List links, final List businessHours, - final List reviewTags + final List reviewTags ) { this.id = id; this.name = name; diff --git a/src/main/java/org/prography/kagongsillok/record/application/StudyRecordService.java b/src/main/java/org/prography/kagongsillok/record/application/StudyRecordService.java index e2ad423..99d2f87 100644 --- a/src/main/java/org/prography/kagongsillok/record/application/StudyRecordService.java +++ b/src/main/java/org/prography/kagongsillok/record/application/StudyRecordService.java @@ -4,7 +4,6 @@ import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.prography.kagongsillok.common.utils.CustomListUtils; -import org.prography.kagongsillok.common.utils.CustomStringUtils; import org.prography.kagongsillok.image.application.exception.NotFoundImageException; import org.prography.kagongsillok.image.domain.Image; import org.prography.kagongsillok.image.domain.ImageRepository; @@ -17,7 +16,6 @@ import org.prography.kagongsillok.record.application.exception.NotFoundStudyRecordException; import org.prography.kagongsillok.record.domain.StudyRecord; import org.prography.kagongsillok.record.domain.StudyRecordRepository; -import org.prography.kagongsillok.review.domain.Review; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -78,7 +76,7 @@ public void deleteStudyRecord(final Long id) { } private void checkExistImage(final List imageIds) { - if (imageRepository.isExistIdIn(imageIds)) { + if (imageRepository.isNotExistIdIn(imageIds)) { throw new NotFoundImageException(imageIds); } } diff --git a/src/main/java/org/prography/kagongsillok/record/application/dto/StudyRecordDto.java b/src/main/java/org/prography/kagongsillok/record/application/dto/StudyRecordDto.java index 0fa9123..ca5a90d 100644 --- a/src/main/java/org/prography/kagongsillok/record/application/dto/StudyRecordDto.java +++ b/src/main/java/org/prography/kagongsillok/record/application/dto/StudyRecordDto.java @@ -10,6 +10,8 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.prography.kagongsillok.common.utils.CustomListUtils; +import org.prography.kagongsillok.image.application.dto.ImageDto; import org.prography.kagongsillok.image.domain.Image; import org.prography.kagongsillok.record.domain.StudyRecord; @@ -22,7 +24,7 @@ public class StudyRecordDto { private LocalDate studyDate; private String description; private int duration; - private List images; + private List images; private ZonedDateTime writtenAt; @Builder @@ -32,7 +34,7 @@ public StudyRecordDto( final LocalDate studyDate, final String description, final int duration, - final List images, + final List images, final ZonedDateTime writtenAt ) { this.id = id; @@ -51,7 +53,7 @@ public static StudyRecordDto of(final StudyRecord studyRecord, final List .studyDate(studyRecord.getStudyDate()) .duration(studyRecord.getDuration()) .description(studyRecord.getDescription()) - .images(images) + .images(CustomListUtils.mapTo(images, ImageDto::from)) .writtenAt(studyRecord.getWrittenAt()) .build(); } diff --git a/src/main/java/org/prography/kagongsillok/record/ui/dto/StudyRecordResponse.java b/src/main/java/org/prography/kagongsillok/record/ui/dto/StudyRecordResponse.java index ff301bd..f3d18d6 100644 --- a/src/main/java/org/prography/kagongsillok/record/ui/dto/StudyRecordResponse.java +++ b/src/main/java/org/prography/kagongsillok/record/ui/dto/StudyRecordResponse.java @@ -7,6 +7,7 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.prography.kagongsillok.image.application.dto.ImageDto; import org.prography.kagongsillok.image.domain.Image; import org.prography.kagongsillok.record.application.dto.StudyRecordDto; @@ -19,7 +20,7 @@ public class StudyRecordResponse { private LocalDate studyDate; private String description; private int duration; - private List images; + private List images; private ZonedDateTime writtenAt; @Builder @@ -29,7 +30,7 @@ public StudyRecordResponse( final LocalDate studyDate, final String description, final int duration, - final List images, + final List images, final ZonedDateTime writtenAt ) { this.id = id; diff --git a/src/main/java/org/prography/kagongsillok/review/application/ReviewService.java b/src/main/java/org/prography/kagongsillok/review/application/ReviewService.java index 94c20c7..9f10ae8 100644 --- a/src/main/java/org/prography/kagongsillok/review/application/ReviewService.java +++ b/src/main/java/org/prography/kagongsillok/review/application/ReviewService.java @@ -5,7 +5,6 @@ import java.util.Map; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; -import org.prography.kagongsillok.common.utils.CustomListUtils; import org.prography.kagongsillok.image.application.exception.NotFoundImageException; import org.prography.kagongsillok.image.domain.Image; import org.prography.kagongsillok.image.domain.ImageRepository; @@ -55,8 +54,9 @@ public ReviewDto createReview(final ReviewCreateCommand reviewCreateCommand) { final Review review = reviewCreateCommand.toEntity(member.getNickname(), reviewTagIds); final Review savedReview = reviewRepository.save(review); + final List images = imageRepository.findByIdIn(review.getImageIds()); - return ReviewDto.of(savedReview, member, getImages(savedReview)); + return ReviewDto.of(savedReview, member, images); } public ReviewDto getReview(final Long id) { @@ -68,26 +68,49 @@ public ReviewDto getReview(final Long id) { if (review.getIsDeleted()) { throw new NotFoundReviewException(id); } - if (member.getIsDeleted()) { - throw new NotFoundReviewException(memberId); - } - return ReviewDto.of(review, member, getImages(review)); + final List images = imageRepository.findByIdIn(review.getImageIds()); + + return ReviewDto.of(review, member, images); } public List getAllReviewsByMemberId(final Long memberId) { final List reviews = reviewRepository.findAllByMemberId(memberId); - List reviewDtos = new ArrayList<>(); - for (Review review : reviews) { - final Member member = memberRepository.findById(review.getMemberId()) - .orElseThrow(() -> new NotFoundMemberException(review.getMemberId())); - final Place place = placeRepository.findById(review.getPlaceId()) - .orElseThrow(() -> new NotFoundPlaceException(review.getPlaceId())); - reviewDtos.add(ReviewDto.of(review, member, getImages(review), place)); + if (reviews.isEmpty()) { + return List.of(); } - return reviewDtos; + final List memberIds = reviews.stream() + .map(Review::getMemberId) + .collect(Collectors.toList()); + + final List placeIds = reviews.stream() + .map(Review::getPlaceId) + .collect(Collectors.toList()); + + final List imageIds = reviews.stream() + .map(Review::getImageIds) + .flatMap(List::stream) + .collect(Collectors.toList()); + + final Map memberMap = memberRepository.findByIdIn(memberIds); + final Map placeMap = placeRepository.findByIdInToMap(placeIds); + final Map imageMap = imageRepository.findByIdInToMap(imageIds); + final Map> reviewIdImageIdsMap = reviews + .stream() + .collect(Collectors.toMap(Review::getId, Review::getImageIds)); + + List reviewDtos = new ArrayList<>(); + + return reviews.stream() + .map(review -> ReviewDto.of( + review, + memberMap.get(review.getMemberId()), + getMappedImages(reviewIdImageIdsMap.get(review.getId()), imageMap), + placeMap.get(review.getPlaceId()) + )) + .collect(Collectors.toList()); } public List getAllReviewsByPlaceId(final Long placeId) { @@ -114,7 +137,9 @@ public ReviewDto updateReview(final Long id, final ReviewUpdateCommand reviewUpd final Member member = memberRepository.findById(target.getMemberId()) .orElseThrow(() -> new NotFoundMemberException(target.getMemberId())); - return ReviewDto.of(review, member, getImages(review)); + final List images = imageRepository.findByIdIn(review.getImageIds()); + + return ReviewDto.of(review, member, images); } @Transactional @@ -148,7 +173,7 @@ public ReviewImageListDto getPlaceReviewImages(final Long placeId) { private List bindMemberAndImage(final List reviews, final Map members, final Map images) { - List reviewImageDtos = new ArrayList<>(); + final List reviewImageDtos = new ArrayList<>(); for (Review review : reviews) { reviewImageDtos.addAll(getReviewImageDtos(review, members, images)); @@ -161,7 +186,6 @@ private Member getMappedMember(final Review review, final Map memb Long memberId = review.getMemberId(); if (!members.containsKey(memberId)) { - // 가드 로직: 멤버 ID가 멤버 맵에 존재하지 않으면 null 반환 또는 예외 처리 등을 수행할 수 있습니다. return Member.builder() .nickname("알 수 없음") .email("Unknown@unknown.com") @@ -188,11 +212,12 @@ private List getReviewImageDtos(final Review review, final Map mappedImages = getMappedImage(review, images); for (Image mappedImage : mappedImages) { - reviewImageDtos.add(ReviewImageDto.of(mappedMember, mappedImage)); + reviewImageDtos.add(ReviewImageDto.of(review.getId(), mappedMember, mappedImage)); } return reviewImageDtos; } + private List getReviewedMemberIds(final List reviews) { return reviews.stream() .map(review -> review.getMemberId()) @@ -202,26 +227,23 @@ private List getReviewedMemberIds(final List reviews) { private List mappingMemberToReview(final List reviews, final Map members) { return reviews.stream() .map(review -> { - Member member = members.get(review.getMemberId()); - if (member == null) { - member = Member.builder() - .nickname("알 수 없음") - .email("Unknown@unknown.com") - .build(); - } - - return ReviewDto.of(review, member, getImages(review)); + Member member = members.getOrDefault(review.getMemberId(), Member.defaultOf()); + List images = imageRepository.findByIdIn(review.getImageIds()); + + return ReviewDto.of(review, member, images); }) .collect(Collectors.toList()); } - private List getImages(final Review review) { - return imageRepository.findByIdIn(review.getImageIds()); - } - private void checkExistImage(final List imageIds) { - if (imageRepository.isExistIdIn(imageIds)) { + if (imageRepository.isNotExistIdIn(imageIds)) { throw new NotFoundImageException(imageIds); } } + + private List getMappedImages(final List imageIds, final Map imageMap) { + return imageIds.stream() + .map(imageId -> imageMap.get(imageId)) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/org/prography/kagongsillok/review/application/dto/ReviewDto.java b/src/main/java/org/prography/kagongsillok/review/application/dto/ReviewDto.java index 1c109d0..2a2d49f 100644 --- a/src/main/java/org/prography/kagongsillok/review/application/dto/ReviewDto.java +++ b/src/main/java/org/prography/kagongsillok/review/application/dto/ReviewDto.java @@ -7,6 +7,8 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.prography.kagongsillok.common.utils.CustomListUtils; +import org.prography.kagongsillok.image.application.dto.ImageDto; import org.prography.kagongsillok.image.domain.Image; import org.prography.kagongsillok.member.domain.Member; import org.prography.kagongsillok.place.domain.Place; @@ -27,7 +29,7 @@ public class ReviewDto { private String memberProfileUrl; private int rating; private String content; - private List images; + private List images; private List tagIds; private ZonedDateTime writtenAt; @@ -41,7 +43,7 @@ public ReviewDto( final String memberProfileUrl, final int rating, final String content, - final List images, + final List images, final List tagIds, final ZonedDateTime writtenAt ) { @@ -68,7 +70,7 @@ public static ReviewDto of(Review review, final Member member, final List .memberProfileUrl(member.getProfileImageUrl()) .rating(review.getRating()) .content(review.getContent()) - .images(images) + .images(CustomListUtils.mapTo(images, ImageDto::from)) .tagIds(getTagIds(review.getTagMappings())) .writtenAt(review.getWrittenAt()) .build(); @@ -85,7 +87,7 @@ public static ReviewDto of(final Review review, final Member member, final List< .memberProfileUrl(member.getProfileImageUrl()) .rating(review.getRating()) .content(review.getContent()) - .images(images) + .images(CustomListUtils.mapTo(images, ImageDto::from)) .tagIds(getTagIds(review.getTagMappings())) .writtenAt(review.getWrittenAt()) .build(); diff --git a/src/main/java/org/prography/kagongsillok/review/application/dto/ReviewImageDto.java b/src/main/java/org/prography/kagongsillok/review/application/dto/ReviewImageDto.java index f8596cd..0aa3b67 100644 --- a/src/main/java/org/prography/kagongsillok/review/application/dto/ReviewImageDto.java +++ b/src/main/java/org/prography/kagongsillok/review/application/dto/ReviewImageDto.java @@ -11,17 +11,19 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) public class ReviewImageDto { + private Long reviewId; private String imageUrl; private String memberName; private String memberProfileUrl; - private ReviewImageDto(final Member member, final Image image) { + private ReviewImageDto(final Long reviewId, final Member member, final Image image) { + this.reviewId = reviewId; this.imageUrl = image.getUrl(); this.memberName = member.getNickname(); this.memberProfileUrl = member.getProfileImageUrl(); } - public static ReviewImageDto of(Member member, Image image) { - return new ReviewImageDto(member, image); + public static ReviewImageDto of(final Long reviewId, final Member member, final Image image) { + return new ReviewImageDto(reviewId, member, image); } } diff --git a/src/main/java/org/prography/kagongsillok/review/domain/Review.java b/src/main/java/org/prography/kagongsillok/review/domain/Review.java index 6a9605a..f5eaa17 100644 --- a/src/main/java/org/prography/kagongsillok/review/domain/Review.java +++ b/src/main/java/org/prography/kagongsillok/review/domain/Review.java @@ -75,7 +75,7 @@ public void update(final Review target) { } public List getImageIds() { - if (imageIds == null) { + if (imageIds.equals("")) { return List.of(); } return CustomStringUtils.splitToList(imageIds, ",", Long::valueOf); diff --git a/src/main/java/org/prography/kagongsillok/review/ui/dto/ReviewResponse.java b/src/main/java/org/prography/kagongsillok/review/ui/dto/ReviewResponse.java index a27019b..4b8b3ae 100644 --- a/src/main/java/org/prography/kagongsillok/review/ui/dto/ReviewResponse.java +++ b/src/main/java/org/prography/kagongsillok/review/ui/dto/ReviewResponse.java @@ -6,6 +6,7 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.prography.kagongsillok.image.application.dto.ImageDto; import org.prography.kagongsillok.image.domain.Image; import org.prography.kagongsillok.review.application.dto.ReviewDto; @@ -16,7 +17,7 @@ public class ReviewResponse { private Long id; private int rating; private String content; - private List images; + private List images; private List tagIds; private Long memberId; private Long placeId; @@ -28,7 +29,7 @@ public ReviewResponse( final Long id, final int rating, final String content, - final List images, + final List images, final List tagIds, final Long memberId, final Long placeId,