From c412b95090e874eeb49e797ad6f62aaa05687e18 Mon Sep 17 00:00:00 2001 From: seokhee Date: Fri, 20 Sep 2024 14:27:23 +0900 Subject: [PATCH] =?UTF-8?q?[#397]=20refactor:=20javadoc=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExperienceRepositoryCustom.java | 2 +- .../repository/ExperienceRepositoryImpl.java | 105 ++++++++++-------- .../experience/service/ExperienceService.java | 26 ++++- 3 files changed, 80 insertions(+), 53 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 6f55c9c2..8a032ff2 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 @@ -14,7 +14,7 @@ public interface ExperienceRepositoryCustom { - ExperienceCompositeDto findCompositeDtoById(Long id, Language language); + ExperienceCompositeDto findExperienceCompositeDto(Long id, Language language); Page searchCompositeDtoByKeyword(String Keyword, Language language, Pageable pageable); 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 84046abd..c6879148 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 @@ -9,6 +9,7 @@ import com.jeju.nanaland.domain.common.data.Category; import com.jeju.nanaland.domain.common.data.Language; import com.jeju.nanaland.domain.common.dto.PostPreviewDto; +import com.jeju.nanaland.domain.common.dto.QPostPreviewDto; import com.jeju.nanaland.domain.experience.dto.ExperienceCompositeDto; import com.jeju.nanaland.domain.experience.dto.ExperienceResponse; import com.jeju.nanaland.domain.experience.dto.QExperienceCompositeDto; @@ -38,7 +39,7 @@ public class ExperienceRepositoryImpl implements ExperienceRepositoryCustom { private final JPAQueryFactory queryFactory; @Override - public ExperienceCompositeDto findCompositeDtoById(Long id, Language language) { + public ExperienceCompositeDto findExperienceCompositeDto(Long id, Language language) { return queryFactory .select(new QExperienceCompositeDto( experience.id, @@ -60,7 +61,10 @@ public ExperienceCompositeDto findCompositeDtoById(Long id, Language language) { .from(experience) .leftJoin(experience.firstImageFile, imageFile) .leftJoin(experience.experienceTrans, experienceTrans) - .where(experience.id.eq(id).and(experienceTrans.language.eq(language))) + .where( + experience.id.eq(id), + experienceTrans.language.eq(language) + ) .fetchOne(); } @@ -92,10 +96,12 @@ public Page searchCompositeDtoByKeyword(String keyword, .leftJoin(experience.firstImageFile, imageFile) .leftJoin(experience.experienceTrans, experienceTrans) .on(experienceTrans.language.eq(language)) - .where(experienceTrans.title.contains(keyword) - .or(experienceTrans.addressTag.contains(keyword)) - .or(experienceTrans.content.contains(keyword)) - .or(experience.id.in(idListContainAllHashtags))) + .where( + experienceTrans.title.contains(keyword) + .or(experienceTrans.addressTag.contains(keyword)) + .or(experienceTrans.content.contains(keyword)) + .or(experience.id.in(idListContainAllHashtags)) + ) .orderBy(experienceTrans.createdAt.desc()) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) @@ -107,10 +113,12 @@ public Page searchCompositeDtoByKeyword(String keyword, .leftJoin(experience.firstImageFile, imageFile) .leftJoin(experience.experienceTrans, experienceTrans) .on(experienceTrans.language.eq(language)) - .where(experienceTrans.title.contains(keyword) - .or(experienceTrans.addressTag.contains(keyword)) - .or(experienceTrans.content.contains(keyword)) - .or(experience.id.in(idListContainAllHashtags))); + .where( + experienceTrans.title.contains(keyword) + .or(experienceTrans.addressTag.contains(keyword)) + .or(experienceTrans.content.contains(keyword)) + .or(experience.id.in(idListContainAllHashtags)) + ); return PageableExecutionUtils.getPage(resultDto, pageable, countQuery::fetchOne); } @@ -134,12 +142,16 @@ public Page findAllExperiencePreviewDtoOrderByPri .innerJoin(experience.experienceTrans, experienceTrans) .innerJoin(experienceKeyword) .on(experienceKeyword.experience.id.eq(experience.id)) - .where(experienceTrans.language.eq(language) - .and(experience.experienceType.eq(experienceType)) // 이색체험 타입(액티비티/문화예술) - .and(addressTagCondition(addressFilterList)) // 지역필터 - .and(keywordCondition(keywordFilterList))) // 키워드 필터 - .orderBy(experience.priority.desc(), // 우선순위 정렬 - experience.createdAt.desc()) // 최신순 정렬 + .where( + experienceTrans.language.eq(language), + experience.experienceType.eq(experienceType), // 이색체험 타입(액티비티/문화예술) + addressTagCondition(addressFilterList), // 지역필터 + keywordCondition(keywordFilterList) // 키워드 필터 + ) + .orderBy( + experience.priority.desc(), // 우선순위 정렬 + experience.createdAt.desc() // 최신순 정렬 + ) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); @@ -151,10 +163,12 @@ public Page findAllExperiencePreviewDtoOrderByPri .innerJoin(experience.experienceTrans, experienceTrans) .innerJoin(experienceKeyword) .on(experienceKeyword.experience.id.eq(experience.id)) - .where(experienceTrans.language.eq(language) - .and(experience.experienceType.eq(experienceType)) - .and(addressTagCondition(addressFilterList)) - .and(keywordCondition(keywordFilterList))); + .where( + experienceTrans.language.eq(language), + experience.experienceType.eq(experienceType), + addressTagCondition(addressFilterList), + keywordCondition(keywordFilterList) + ); return PageableExecutionUtils.getPage(resultDto, pageable, countQuery::fetchOne); } @@ -193,21 +207,20 @@ public List findAllIds() { @Override public PostPreviewDto findPostPreviewDto(Long postId, Language language) { -// return queryFactory -// .select(new QPostPreviewDto( -// experience.id, -// experienceTrans.title, -// imageFile.originUrl, -// imageFile.thumbnailUrl -// )) -// .from(experience) -// .innerJoin(experience.experienceTrans, experienceTrans) -// .innerJoin(experience.firstImageFile, imageFile) -// .where( -// experience.id.eq(postId), -// experienceTrans.language.eq(language)) -// .fetchOne(); - return null; + return queryFactory + .select(new QPostPreviewDto( + experience.id, + experienceTrans.title, + imageFile.originUrl, + imageFile.thumbnailUrl + )) + .from(experience) + .innerJoin(experience.experienceTrans, experienceTrans) + .innerJoin(experience.firstImageFile, imageFile) + .where( + experience.id.eq(postId), + experienceTrans.language.eq(language)) + .fetchOne(); } private List getIdListContainAllHashtags(String keyword, Language language) { @@ -215,12 +228,13 @@ private List getIdListContainAllHashtags(String keyword, Language language .select(experience.id) .from(experience) .leftJoin(hashtag) - .on(hashtag.post.id.eq(experience.id) - .and(hashtag.category.eq(Category.EXPERIENCE)) - .and(hashtag.language.eq(language))) + .on(hashtag.post.id.eq(experience.id), + hashtag.category.eq(Category.EXPERIENCE), + hashtag.language.eq(language) + ) .where(hashtag.keyword.content.in(splitKeyword(keyword))) .groupBy(experience.id) - .having(experience.id.count().eq(splitKeyword(keyword).stream().count())) + .having(experience.id.count().eq((long) splitKeyword(keyword).size())) .fetch(); } @@ -235,18 +249,11 @@ private List splitKeyword(String keyword) { } private BooleanExpression addressTagCondition(List addressFilterList) { - if (addressFilterList.isEmpty()) { - return null; - } else { - return experienceTrans.addressTag.in(addressFilterList); - } + return addressFilterList.isEmpty() ? null : experienceTrans.addressTag.in(addressFilterList); } private BooleanExpression keywordCondition(List keywordFilterList) { - if (keywordFilterList.isEmpty()) { - return null; - } else { - return experienceKeyword.experienceTypeKeyword.in(keywordFilterList); - } + return keywordFilterList.isEmpty() ? null + : experienceKeyword.experienceTypeKeyword.in(keywordFilterList); } } diff --git a/src/main/java/com/jeju/nanaland/domain/experience/service/ExperienceService.java b/src/main/java/com/jeju/nanaland/domain/experience/service/ExperienceService.java index 3974200d..5f5c27a8 100644 --- a/src/main/java/com/jeju/nanaland/domain/experience/service/ExperienceService.java +++ b/src/main/java/com/jeju/nanaland/domain/experience/service/ExperienceService.java @@ -77,7 +77,20 @@ public PostPreviewDto getPostPreviewDto(Long postId, Category category, Language return postPreviewDto; } - // 이색체험 리스트 조회 + /** + * 이색체험 리스트 조회 + * + * @param memberInfoDto 회원 정보 + * @param experienceType 이색체험 타입 (ACTIVITY, CULTURE_AND_ARTS) + * @param keywordFilterList 키워드 필터 (LAND_LEISURE, WATER_LEISURE, AIR_LEISURE, MARINE_EXPERIENCE, + * RURAL_EXPERIENCE, HEALING_THERAPY, HISTORY, EXHIBITION, WORKSHOP, + * ART_MUSEUM, MUSEUM, PARK, PERFORMANCE, RELIGIOUS_FACILITY, + * THEME_PARK) + * @param addressFilterList 지역 필터 + * @param page 페이지 + * @param size 페이지 크기 + * @return ExperienceResponse.PreviewPageDto + */ public ExperienceResponse.PreviewPageDto getExperiencePreviews(MemberInfoDto memberInfoDto, ExperienceType experienceType, List keywordFilterList, List addressFilterList, int page, int size) { @@ -108,12 +121,19 @@ public ExperienceResponse.PreviewPageDto getExperiencePreviews(MemberInfoDto mem .build(); } - // 이색체험 상세 정보 조회 + /** + * 이색체험 상세정보 조회 + * + * @param memberInfoDto 회원 정보 + * @param postId 게시물 id + * @param isSearch 검색을 통해 들어왔는지 여부 + * @return ExperienceResponse.DetailDto + */ public ExperienceResponse.DetailDto getExperienceDetail(MemberInfoDto memberInfoDto, Long postId, boolean isSearch) { Language language = memberInfoDto.getLanguage(); - ExperienceCompositeDto experienceCompositeDto = experienceRepository.findCompositeDtoById( + ExperienceCompositeDto experienceCompositeDto = experienceRepository.findExperienceCompositeDto( postId, language); // 해당 id의 포스트가 없는 경우 404 에러