diff --git a/clokey-api/src/main/java/org/clokey/domain/cloth/repository/ClothRepositoryImpl.java b/clokey-api/src/main/java/org/clokey/domain/cloth/repository/ClothRepositoryImpl.java index 7b6d66c9..6b7241b7 100644 --- a/clokey-api/src/main/java/org/clokey/domain/cloth/repository/ClothRepositoryImpl.java +++ b/clokey-api/src/main/java/org/clokey/domain/cloth/repository/ClothRepositoryImpl.java @@ -35,20 +35,22 @@ public Slice findAllMemberRecommendClothesByCategory Season nextSeason = season.next(); Season previousSeason = season.previous(); Season oppositeSeason = season.next().next(); + List targetSeasons = List.of(season, nextSeason, previousSeason, oppositeSeason); // 우선 순위에 맞게 페이징 합니다. // - Category는 고정입니다. // - 계절은 요청한 계절에 가까운 순서대로 페이징을 진행합니다. NumberExpression seasonPriority = new CaseBuilder() - .when(cloth.seasons.contains(season)) + .when(cloth.seasons.any().in(List.of(season))) .then(1) .when( cloth.seasons - .contains(nextSeason) - .or(cloth.seasons.contains(previousSeason))) + .any() + .in(List.of(nextSeason)) + .or(cloth.seasons.any().in(List.of(previousSeason)))) .then(2) - .when(cloth.seasons.contains(oppositeSeason)) + .when(cloth.seasons.any().in(List.of(oppositeSeason))) .then(3) .otherwise(4); @@ -58,11 +60,7 @@ public Slice findAllMemberRecommendClothesByCategory .where( cloth.category.id.eq(categoryId), cloth.member.id.eq(memberId), - cloth.seasons - .contains(season) - .or(cloth.seasons.contains(nextSeason)) - .or(cloth.seasons.contains(previousSeason)) - .or(cloth.seasons.contains(oppositeSeason))) + cloth.seasons.any().in(targetSeasons)) .orderBy(seasonPriority.asc(), cloth.id.asc()) .fetch(); diff --git a/clokey-api/src/main/java/org/clokey/domain/lookbook/repository/LookBookRepositoryImpl.java b/clokey-api/src/main/java/org/clokey/domain/lookbook/repository/LookBookRepositoryImpl.java index 8f70e5d1..8276ba72 100644 --- a/clokey-api/src/main/java/org/clokey/domain/lookbook/repository/LookBookRepositoryImpl.java +++ b/clokey-api/src/main/java/org/clokey/domain/lookbook/repository/LookBookRepositoryImpl.java @@ -9,6 +9,7 @@ import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.List; import lombok.RequiredArgsConstructor; +import org.clokey.coordinate.entity.QCoordinate; import org.clokey.domain.lookbook.dto.response.LookBookListResponse; import org.clokey.global.paging.SortDirection; import org.springframework.data.domain.PageRequest; @@ -25,6 +26,8 @@ public class LookBookRepositoryImpl implements LookBookRepositoryCustom { @Override public Slice findAllLookBookByMemberId( Long currentMemberId, Long lastLookBookId, int size, SortDirection direction) { + QCoordinate firstCoordinate = new QCoordinate("firstCoordinate"); + List results = queryFactory .select( @@ -35,12 +38,15 @@ public Slice findAllLookBookByMemberId( JPAExpressions.select(coordinate.count()) .from(coordinate) .where(coordinate.lookBook.id.eq(lookBook.id)), - JPAExpressions.select(coordinate.imageUrl) - .from(coordinate) - .where(coordinate.lookBook.id.eq(lookBook.id)) - .orderBy(coordinate.id.asc()) - .limit(1))) + firstCoordinate.imageUrl)) .from(lookBook) + .leftJoin(firstCoordinate) + .on( + firstCoordinate.lookBook.id.eq(lookBook.id), + firstCoordinate.id.eq( + JPAExpressions.select(coordinate.id.min()) + .from(coordinate) + .where(coordinate.lookBook.id.eq(lookBook.id)))) .where( lookBook.member.id.eq(currentMemberId), lastLookBookIdCondition(lastLookBookId, direction))