-
Notifications
You must be signed in to change notification settings - Fork 1
fix: 독서 기록 pagenumber로 order by 시 페이징처리 동일한 id가 내려오는 상황 #97
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -31,7 +31,7 @@ class JpaReadingRecordQuerydslRepositoryImpl( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| val results = queryFactory | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| .selectFrom(readingRecord) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| .where(whereCondition) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| .orderBy(createOrderSpecifier(sort)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| .orderBy(*createOrderSpecifiers(sort)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| .offset(pageable.offset) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| .limit(pageable.pageSize.toLong()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| .fetch() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -45,13 +45,21 @@ class JpaReadingRecordQuerydslRepositoryImpl( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return PageImpl(results, pageable, total) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| private fun createOrderSpecifier(sort: ReadingRecordSortType?): OrderSpecifier<*> { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| private fun createOrderSpecifiers(sort: ReadingRecordSortType?): Array<OrderSpecifier<*>> { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return when (sort) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ReadingRecordSortType.PAGE_NUMBER_ASC -> readingRecord.pageNumber.asc() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ReadingRecordSortType.PAGE_NUMBER_DESC -> readingRecord.pageNumber.desc() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ReadingRecordSortType.CREATED_DATE_ASC -> readingRecord.createdAt.asc() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ReadingRecordSortType.CREATED_DATE_DESC -> readingRecord.createdAt.desc() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| null -> readingRecord.createdAt.desc() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ReadingRecordSortType.PAGE_NUMBER_ASC -> arrayOf( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| readingRecord.pageNumber.asc(), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| readingRecord.updatedAt.desc() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+50
to
+53
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick (assertive) updatedAt을 보조 정렬로 사용한 선택은 타당합니다 동일 pageNumber 내에서 “최근 수정 기준”을 기대한다면 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ReadingRecordSortType.PAGE_NUMBER_DESC -> arrayOf( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| readingRecord.pageNumber.desc(), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| readingRecord.updatedAt.desc() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+48
to
+59
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick (assertive) 🛠️ Refactor suggestion 타이브레이커 부족 — id로 최종 정렬 기준을 추가해 페이징 안정성을 보장하세요
권장 변경(diff): ReadingRecordSortType.PAGE_NUMBER_ASC -> arrayOf(
readingRecord.pageNumber.asc(),
- readingRecord.updatedAt.desc()
+ readingRecord.updatedAt.desc(),
+ readingRecord.id.desc()
)
ReadingRecordSortType.PAGE_NUMBER_DESC -> arrayOf(
readingRecord.pageNumber.desc(),
- readingRecord.updatedAt.desc()
+ readingRecord.updatedAt.desc(),
+ readingRecord.id.desc()
)
성능(인덱스) 관점:
오프셋 페이징의 본질적 한계:
📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ReadingRecordSortType.CREATED_DATE_ASC -> arrayOf(readingRecord.createdAt.asc()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ReadingRecordSortType.CREATED_DATE_DESC -> arrayOf(readingRecord.createdAt.desc()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| null -> arrayOf(readingRecord.createdAt.desc()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+60
to
63
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick (assertive) createdAt 정렬에도 유일 타이브레이커(id) 추가를 고려 본 PR 범위를 넘는 제안이지만, 권장 변경(diff): - ReadingRecordSortType.CREATED_DATE_ASC -> arrayOf(readingRecord.createdAt.asc())
- ReadingRecordSortType.CREATED_DATE_DESC -> arrayOf(readingRecord.createdAt.desc())
- null -> arrayOf(readingRecord.createdAt.desc())
+ ReadingRecordSortType.CREATED_DATE_ASC -> arrayOf(
+ readingRecord.createdAt.asc(),
+ readingRecord.id.desc()
+ )
+ ReadingRecordSortType.CREATED_DATE_DESC -> arrayOf(
+ readingRecord.createdAt.desc(),
+ readingRecord.id.desc()
+ )
+ null -> arrayOf(
+ readingRecord.createdAt.desc(),
+ readingRecord.id.desc()
+ )단위 테스트 보강 제안:
📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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.
🧹 Nitpick (assertive)
스프레드 연산자 사용(detekt 경고) — 영향 미미하나 억제 또는 구조 변경을 고려하세요
.orderBy(*createOrderSpecifiers(sort))는 detekt의 SpreadOperator 경고 대상입니다. 현재 배열 길이가 1~2 수준이라 성능 영향은 사실상 미미합니다. 유지보수를 위해 그대로 두되 경고 억제 또는 호출부 구조 변경 중 하나를 권장합니다.대안 1: 함수 레벨에서 경고 억제
대안 2: 스프레드 없이 체이닝
createOrderSpecifiers를 사용하지 않고when분기 내에서.orderBy(a, b)형태로 직접 지정🧰 Tools
🪛 detekt (1.23.8)
[warning] 34-34: In most cases using a spread operator causes a full copy of the array to be created before calling a method. This may result in a performance penalty.
(detekt.performance.SpreadOperator)
🤖 Prompt for AI Agents