From 58fcc6eedd92e2a97b820fe7dad9723f6d7d0769 Mon Sep 17 00:00:00 2001 From: teho Date: Wed, 8 Jan 2025 00:21:31 +0900 Subject: [PATCH] =?UTF-8?q?[#539]=20refactor:=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=EC=96=B4=20=EC=9E=90=EB=8F=99=EC=99=84?= =?UTF-8?q?=EC=84=B1=20=EC=9D=B4=EC=83=89=EC=B2=B4=ED=97=98=20=EC=B9=B4?= =?UTF-8?q?=ED=85=8C=EA=B3=A0=EB=A6=AC=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExperienceRepositoryCustom.java | 5 +++- .../repository/ExperienceRepositoryImpl.java | 23 +++++++++++++++-- .../domain/review/dto/ReviewResponse.java | 5 ++-- .../domain/review/service/ReviewService.java | 25 +++++++++++++++---- 4 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/jeju/nanaland/domain/experience/repository/ExperienceRepositoryCustom.java b/src/main/java/com/jeju/nanaland/domain/experience/repository/ExperienceRepositoryCustom.java index 5ce4700b..c22eee4e 100644 --- a/src/main/java/com/jeju/nanaland/domain/experience/repository/ExperienceRepositoryCustom.java +++ b/src/main/java/com/jeju/nanaland/domain/experience/repository/ExperienceRepositoryCustom.java @@ -29,7 +29,10 @@ Page findExperienceThumbnails(Language language, Set getExperienceTypeKeywordSetWithWithPessimisticLock(Long postId); - List findAllSearchPostForReviewDtoByLanguage(Language language); + List findAllSearchActivityPostForReviewDtoByLanguage(Language language); + + List findAllSearchCultureAndArtsPostForReviewDtoByLanguage( + Language language); List findAllIds(); diff --git a/src/main/java/com/jeju/nanaland/domain/experience/repository/ExperienceRepositoryImpl.java b/src/main/java/com/jeju/nanaland/domain/experience/repository/ExperienceRepositoryImpl.java index fb136d61..583144d4 100644 --- a/src/main/java/com/jeju/nanaland/domain/experience/repository/ExperienceRepositoryImpl.java +++ b/src/main/java/com/jeju/nanaland/domain/experience/repository/ExperienceRepositoryImpl.java @@ -311,16 +311,35 @@ public Set getExperienceTypeKeywordSetWithWithPessimistic return map.getOrDefault(postId, Collections.emptySet()); } + + // List findAllSearchCultureAndArtsPostForReviewDtoByLanguage(Language language); @Override - public List findAllSearchPostForReviewDtoByLanguage(Language language) { + public List findAllSearchActivityPostForReviewDtoByLanguage( + Language language) { return queryFactory .select( new QReviewResponse_SearchPostForReviewDto(experience.id, - Expressions.constant(Category.EXPERIENCE.name()), + Expressions.constant(ExperienceType.ACTIVITY.name()), + experienceTrans.title, experience.firstImageFile, experienceTrans.address)) + .from(experience) + .innerJoin(experience.experienceTrans, experienceTrans) + .where(experienceTrans.language.eq(language)) + .where(experience.experienceType.eq(ExperienceType.ACTIVITY)) + .fetch(); + } + + @Override + public List findAllSearchCultureAndArtsPostForReviewDtoByLanguage( + Language language) { + return queryFactory + .select( + new QReviewResponse_SearchPostForReviewDto(experience.id, + Expressions.constant(ExperienceType.CULTURE_AND_ARTS.name()), experienceTrans.title, experience.firstImageFile, experienceTrans.address)) .from(experience) .innerJoin(experience.experienceTrans, experienceTrans) .where(experienceTrans.language.eq(language)) + .where(experience.experienceType.eq(ExperienceType.CULTURE_AND_ARTS)) .fetch(); } diff --git a/src/main/java/com/jeju/nanaland/domain/review/dto/ReviewResponse.java b/src/main/java/com/jeju/nanaland/domain/review/dto/ReviewResponse.java index 197bbd80..3c81978f 100644 --- a/src/main/java/com/jeju/nanaland/domain/review/dto/ReviewResponse.java +++ b/src/main/java/com/jeju/nanaland/domain/review/dto/ReviewResponse.java @@ -207,7 +207,8 @@ public MemberReviewDetailDto(Long id, Long postId, String category, @Getter @AllArgsConstructor - public static class ExperienceInfo { + public static class ExperienceInfo { + private String title; private String experienceType; } @@ -269,8 +270,6 @@ public static class SearchPostForReviewDto { @Schema(description = "게시물 카테고리 ex) RESTAURANT, EXPERIENCE") private String category; - @Schema(description = "게시물 카테고리 이름, 화면에 사용할 값(언어별 번역 제공) ex) 제주 맛집,,,") - private String categoryValue; @Schema(description = "게시물 제목") private String title; diff --git a/src/main/java/com/jeju/nanaland/domain/review/service/ReviewService.java b/src/main/java/com/jeju/nanaland/domain/review/service/ReviewService.java index 058639e0..5d8c5857 100644 --- a/src/main/java/com/jeju/nanaland/domain/review/service/ReviewService.java +++ b/src/main/java/com/jeju/nanaland/domain/review/service/ReviewService.java @@ -305,7 +305,8 @@ public void deleteMyReview(MemberInfoDto memberInfoDto, Long reviewId) { // 내가 쓴 리뷰 수정 @Transactional - public void updateMyReview(MemberInfoDto memberInfoDto, Long reviewId, EditReviewDto editReviewDto) { + public void updateMyReview(MemberInfoDto memberInfoDto, Long reviewId, + EditReviewDto editReviewDto) { // 유저가 쓴 리뷰 조회 Review review = reviewRepository.findReviewByIdAndMember(reviewId, memberInfoDto.getMember()) .orElseThrow(() -> new NotFoundException(MEMBER_REVIEW_NOT_FOUND.getMessage())); @@ -484,7 +485,8 @@ private void updateReviewImages(Review review, EditReviewDto editReviewDto, .build(); reviewImageFiles.add(reviewImageFile); } else { // 원래 있던 이미지라면 - if (!existImageIds.remove(editImageInfo.getId())) { // set에서 제거하기 , 제거가 안되었다면 imageInfo 잘못 준것 / 나중에 여기 남아있는 건 삭제해야한다고 판단. + if (!existImageIds.remove( + editImageInfo.getId())) { // set에서 제거하기 , 제거가 안되었다면 imageInfo 잘못 준것 / 나중에 여기 남아있는 건 삭제해야한다고 판단. throw new BadRequestException(EDIT_REVIEW_IMAGE_INFO_BAD_REQUEST.getMessage()); } } @@ -513,19 +515,32 @@ private void initAutoCompleteData() { if ("test".equals(System.getProperty("spring.profiles.active"))) { return; } + + // 서버 재시동 시 기존 hash 삭제 + for (Language language : Language.values()) { + Boolean delete = redisTemplate.delete(SEARCH_AUTO_COMPLETE_HASH_KEY + language.name()); + } + HashOperations hashOperations = redisTemplate.opsForHash(); for (Language language : Language.values()) { - experienceRepository.findAllSearchPostForReviewDtoByLanguage(language) + // ACTIVITY 저장 + experienceRepository.findAllSearchActivityPostForReviewDtoByLanguage(language) + .forEach(dto -> { + hashOperations.put(SEARCH_AUTO_COMPLETE_HASH_KEY + language.name(), + dto.getTitle(), dto); + }); + + // CultureAndArts 저장 + experienceRepository.findAllSearchCultureAndArtsPostForReviewDtoByLanguage(language) .forEach(dto -> { - dto.setCategoryValue(Category.EXPERIENCE.getValueByLocale(language)); hashOperations.put(SEARCH_AUTO_COMPLETE_HASH_KEY + language.name(), dto.getTitle(), dto); }); + // restaurant 저장 restaurantRepository.findAllSearchPostForReviewDtoByLanguage(language) .forEach(dto -> { - dto.setCategoryValue(Category.RESTAURANT.getValueByLocale(language)); hashOperations.put(SEARCH_AUTO_COMPLETE_HASH_KEY + language.name(), dto.getTitle(), dto); });