Skip to content

Commit

Permalink
refactor: 보호 동물 목록 조회 쿼리를 개선한다.
Browse files Browse the repository at this point in the history
  • Loading branch information
hseong3243 committed Dec 13, 2023
1 parent a4c4c79 commit c110dd6
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,16 @@ Page<Animal> findAnimals(
Pageable pageable
);

Page<FindAnimalsResult> findAnimalsV1_1(
AnimalType type,
AnimalActive active,
AnimalNeuteredFilter neuteredFilter,
AnimalAge age,
AnimalGender gender,
AnimalSize size,
Pageable pageable
);

Slice<FindAnimalsResult> findAnimalsV2(
AnimalType type,
AnimalActive active,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,61 @@ public Page<Animal> findAnimals(
return new PageImpl<>(animals, pageable, count == null ? 0 : count);
}

@Override
public Page<FindAnimalsResult> findAnimalsV1_1(
AnimalType type,
AnimalActive active,
AnimalNeuteredFilter neuteredFilter,
AnimalAge age,
AnimalGender gender,
AnimalSize size,
Pageable pageable
) {
List<FindAnimalsResult> 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<FindAnimalsResult> findAnimalsV2(
AnimalType type,
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/backend-config
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<FindAnimalsResult> result = animalRepository.findAnimalsV1_1(animalType,
animalActive,
animalNeuteredFilter, animalAge, animalGender, animalSize, pageRequest);

//then
assertThat(result.getContent()).hasSize(2);
}
}
}

0 comments on commit c110dd6

Please sign in to comment.