-
Notifications
You must be signed in to change notification settings - Fork 2
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
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
리스트 검색 기능부분 구현하느라 수고하셨어요 다만 성능면에서 생각하려면 추후 마이그레이션 작업이 필요할 거 같아 코멘트 남겨놨습니다!!
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(); |
There was a problem hiding this comment.
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
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); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 부분은 모든 List데이터를 한번에 가져와서 직접 페이징을 처리하신 걸로 보이는데 추후 무수한 데이터가 있을 경우 성능면에서 문제가 있을 거 같아 보이네요!
추후 query 부분에서 가져올때 처리하는게 더 좋아 보여요!
Description
관련도 정렬을 제외한 리스트 검색 기능을 구현했습니다.
관련도 정렬은 현재
Lists
객체를List
로 수정하고,Lists
이름의 일급 컬렉션을 만들면 쉽게 구현할 수 있을 것 같아 일단 보류해두었습니다.사실 2차 MVP까지 리스트 검색 기능이 완료되어야 하는데 너무 늦게 구현한 것도 있고 오히려 리팩터링을 하면 더 쉽고 간결하게 코드를 작성할 수 있을 것 같아 결정했습니다.
Service 로직도 매우 지저분하여 리팩터링 때 함께 작업할 예정입니다.
Relation Issues