diff --git a/src/main/java/com/clova/anifriends/domain/animal/repository/AnimalRepositoryCustom.java b/src/main/java/com/clova/anifriends/domain/animal/repository/AnimalRepositoryCustom.java index 9e487f52..0941ef71 100644 --- a/src/main/java/com/clova/anifriends/domain/animal/repository/AnimalRepositoryCustom.java +++ b/src/main/java/com/clova/anifriends/domain/animal/repository/AnimalRepositoryCustom.java @@ -37,6 +37,16 @@ Page findAnimals( Pageable pageable ); + Page findAnimalsV1_1( + AnimalType type, + AnimalActive active, + AnimalNeuteredFilter neuteredFilter, + AnimalAge age, + AnimalGender gender, + AnimalSize size, + Pageable pageable + ); + Slice findAnimalsV2( AnimalType type, AnimalActive active, diff --git a/src/main/java/com/clova/anifriends/domain/animal/repository/AnimalRepositoryImpl.java b/src/main/java/com/clova/anifriends/domain/animal/repository/AnimalRepositoryImpl.java index 577dddbf..20c68d4d 100644 --- a/src/main/java/com/clova/anifriends/domain/animal/repository/AnimalRepositoryImpl.java +++ b/src/main/java/com/clova/anifriends/domain/animal/repository/AnimalRepositoryImpl.java @@ -122,6 +122,61 @@ public Page findAnimals( return new PageImpl<>(animals, pageable, count == null ? 0 : count); } + @Override + public Page findAnimalsV1_1( + AnimalType type, + AnimalActive active, + AnimalNeuteredFilter neuteredFilter, + AnimalAge age, + AnimalGender gender, + AnimalSize size, + Pageable pageable + ) { + List animals = query + .select(new QFindAnimalsResult( + animal.animalId, + animal.name.name, + animal.createdAt, + animal.shelter.name.name, + animal.shelter.addressInfo.address, + ExpressionUtils.as( + select(animalImage.imageUrl.max()) + .from(animalImage) + .where(animalImage.animal.eq(animal)) + , "animageImageUrl") + )) + .from(animal) + .join(animal.shelter) + .leftJoin(animal.shelter.image) + .where( + animalTypeContains(type), + animalActiveContains(active), + animalIsNeutered(neuteredFilter), + animalAgeContains(age), + animalGenderContains(gender), + animalSizeContains(size) + ) + .orderBy(animal.createdAt.desc()) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + + Long count = query.select(animal.count()) + .from(animal) + .join(animal.shelter) + .where( + animalTypeContains(type), + animalActiveContains(active), + animalIsNeutered(neuteredFilter), + animalAgeContains(age), + animalGenderContains(gender), + animalSizeContains(size) + ) + .fetchOne(); + + return new PageImpl<>(animals, pageable, count == null ? 0 : count); + } + @Override public Slice findAnimalsV2( AnimalType type, diff --git a/src/main/resources/backend-config b/src/main/resources/backend-config index 6b6e4c5e..b8197492 160000 --- a/src/main/resources/backend-config +++ b/src/main/resources/backend-config @@ -1 +1 @@ -Subproject commit 6b6e4c5eb658279e853c669f87577cfa3240ced3 +Subproject commit b81974921dafe5aded464709effa3cf034dcaa0e diff --git a/src/test/java/com/clova/anifriends/domain/animal/service/AnimalServiceIntegrationTest.java b/src/test/java/com/clova/anifriends/domain/animal/service/AnimalServiceIntegrationTest.java index b3654132..8661e007 100644 --- a/src/test/java/com/clova/anifriends/domain/animal/service/AnimalServiceIntegrationTest.java +++ b/src/test/java/com/clova/anifriends/domain/animal/service/AnimalServiceIntegrationTest.java @@ -29,6 +29,7 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Slice; import org.springframework.transaction.annotation.Transactional; @@ -334,5 +335,26 @@ void findAnimals() { //then assertThat(findAnimals.animals()).hasSize(2); } + + @Test + @DisplayName("성공") + void findAnimalsV1_1() { + //given + Shelter shelter = ShelterFixture.shelter(); + Animal animal = AnimalFixture.animal(shelter); + Animal animalB = AnimalFixture.animal(shelter); + shelterRepository.save(shelter); + animalRepository.save(animal); + animalRepository.save(animalB); + PageRequest pageRequest = PageRequest.of(0, 20); + + //when + Page result = animalRepository.findAnimalsV1_1(animalType, + animalActive, + animalNeuteredFilter, animalAge, animalGender, animalSize, pageRequest); + + //then + assertThat(result.getContent()).hasSize(2); + } } }