Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 관련도 정렬을 제외한 리스트 검색 기능 구현 #99

Merged
merged 2 commits into from
Feb 13, 2024

Conversation

kdkdhoho
Copy link
Collaborator

Description

  • 관련도 정렬을 제외한 리스트 검색 기능을 구현했습니다.

  • 관련도 정렬은 현재 Lists 객체를 List 로 수정하고, Lists 이름의 일급 컬렉션을 만들면 쉽게 구현할 수 있을 것 같아 일단 보류해두었습니다.

  • 사실 2차 MVP까지 리스트 검색 기능이 완료되어야 하는데 너무 늦게 구현한 것도 있고 오히려 리팩터링을 하면 더 쉽고 간결하게 코드를 작성할 수 있을 것 같아 결정했습니다.

  • Service 로직도 매우 지저분하여 리팩터링 때 함께 작업할 예정입니다.

Relation Issues

@kdkdhoho kdkdhoho self-assigned this Feb 12, 2024
@kdkdhoho kdkdhoho requested a review from pparkjs as a code owner February 12, 2024 13:12
@kdkdhoho kdkdhoho linked an issue Feb 12, 2024 that may be closed by this pull request
Copy link
Collaborator

@pparkjs pparkjs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

리스트 검색 기능부분 구현하느라 수고하셨어요 다만 성능면에서 생각하려면 추후 마이그레이션 작업이 필요할 거 같아 코멘트 남겨놨습니다!!

Comment on lines +207 to +219
List<Lists> filtered = all.stream()
.filter(list -> list.isIncluded(category))
.filter(list -> list.isRelatedWith(keyword))
.sorted((list, other) -> {
if (sortType.equals(OLD)) {
return list.getUpdatedDate().compareTo(other.getUpdatedDate());
}
if (sortType.equals(COLLECTED)) {
return -(list.getCollectCount() - other.getCollectCount());
}
return -(list.getUpdatedDate().compareTo(other.getUpdatedDate()));
})
.toList();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당 정렬은 query dsl 을 이용하여 동적 정렬을 이용하시는게 더 좋아보이네요
reference : https://velog.io/@seungho1216/Querydsl%EB%8F%99%EC%A0%81-sorting%EC%9D%84-%EC%9C%84%ED%95%9C-OrderSpecifier-%ED%81%B4%EB%9E%98%EC%8A%A4-%EA%B5%AC%ED%98%84

Comment on lines +221 to +247
List<Lists> result;
if (cursorId == 0L) {
if (filtered.size() >= size) {
return ListSearchResponse.of(filtered.subList(0, size), (long) filtered.size(), filtered.get(size - 1).getId(), true);
}
return ListSearchResponse.of(filtered, (long) filtered.size(), filtered.get(filtered.size() - 1).getId(), false);
} else {
Lists cursorList = listRepository.getById(cursorId);

int cursorIndex = filtered.indexOf(cursorList);
int startIndex = cursorIndex + 1;
int endIndex = cursorIndex + 1 + size;

if (endIndex >= filtered.size()) {
endIndex = filtered.size() - 1;
}

result = filtered.subList(startIndex, endIndex + 1);
}

int totalCount = filtered.size();
if (result.size() < size) {
return ListSearchResponse.of(result, (long) totalCount, result.get(result.size() - 1).getId(), false);
}
boolean hasNext = result.size() > size;
result = result.subList(0, size);
return ListSearchResponse.of(result, (long) totalCount, result.get(result.size() - 1).getId(), hasNext);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당 부분은 모든 List데이터를 한번에 가져와서 직접 페이징을 처리하신 걸로 보이는데 추후 무수한 데이터가 있을 경우 성능면에서 문제가 있을 거 같아 보이네요!

추후 query 부분에서 가져올때 처리하는게 더 좋아 보여요!

@kdkdhoho kdkdhoho merged commit 088bbda into dev Feb 13, 2024
1 check passed
@kdkdhoho kdkdhoho deleted the feat/63 branch February 13, 2024 09:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

리스트 검색 API 구현
2 participants