[FIX] CursorPagingRequest 디폴트값 주입 로직 수정#47
Conversation
WalkthroughCursorPagingRequest의 기본값 주입 로직을 개선했습니다. HasPaging 인터페이스에서 null 크기를 기본값 20으로 처리하고, CursorPagingRequest가 HasPaging을 구현하며, 서비스 계층에서 pagingOrDefault를 통해 기본 정렬 타입을 적용합니다. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes 인터페이스 구현과 기본값 처리 로직이 명확하며, 같은 패턴의 일관된 변경이 서비스 계층에 반복적으로 적용되어 있습니다. 다양한 파일에 걸쳐 있지만 각 변경의 목적과 영향이 단순하고 직관적입니다. Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (3)
src/main/java/konkuk/chacall/global/common/dto/HasPaging.java (1)
16-21: size 기본값 일관화 OK + 매직 넘버 상수화 제안
- 변경된
size계산은 명확하고 중복 생성을 줄입니다. LGTM.- 다만
20,0L,Long.MAX_VALUE가 파일 내 여러 군데 반복됩니다. 인터페이스 상수로 통일하면 오타·불일치를 방지할 수 있습니다. 또한 (선택) 최대 페이지 사이즈 상한을 두는 것도 고려해 주세요.적용 예시:
public interface HasPaging { + int DEFAULT_PAGE_SIZE = 20; + long START_CURSOR_OLDEST = 0L; + long START_CURSOR_NEWEST = Long.MAX_VALUE; CursorPagingRequest cursorPagingRequest(); default CursorPagingRequest pagingOrDefault(SortType sort) { CursorPagingRequest req = cursorPagingRequest(); if (req == null) { - return (sort == SortType.OLDEST) - ? new CursorPagingRequest(0L, 20) - : new CursorPagingRequest(Long.MAX_VALUE, 20); + return (sort == SortType.OLDEST) + ? new CursorPagingRequest(START_CURSOR_OLDEST, DEFAULT_PAGE_SIZE) + : new CursorPagingRequest(START_CURSOR_NEWEST, DEFAULT_PAGE_SIZE); } if (req.cursor() == null) { - int size = (req.size() == null) ? 20 : req.size(); + int size = (req.size() == null) ? DEFAULT_PAGE_SIZE : req.size(); return (sort == SortType.OLDEST) - ? new CursorPagingRequest(0L, size) - : new CursorPagingRequest(Long.MAX_VALUE, size); + ? new CursorPagingRequest(START_CURSOR_OLDEST, size) + : new CursorPagingRequest(START_CURSOR_NEWEST, size); } if (req.size() == null) { - return new CursorPagingRequest(req.cursor(), 20); + return new CursorPagingRequest(req.cursor(), DEFAULT_PAGE_SIZE); }
- 확인 요청: 저장소 쿼리가 NEWEST/OLDEST에서 각각
id < cursor/id > cursor혹은 유사한 비교를 사용한다면 위 센티넬 값이 의도와 일치하는지 한번 더 점검해 주세요.src/main/java/konkuk/chacall/domain/member/application/MemberService.java (1)
41-42: NPE 가능성:cursorPagingRequest가 null이면 바로 NPE컨트롤러/파사드에서 항상 비-null을 보장하지 않으면 여기서 NPE가 납니다. 방어 로직을 권장합니다.
간단한 가드 예시:
- CursorPagingRequest request = cursorPagingRequest.pagingOrDefault(SortType.NEWEST); - return savedFoodTruckService.getSavedFoodTrucks(request, member); + CursorPagingRequest normalized = (cursorPagingRequest != null) + ? cursorPagingRequest.pagingOrDefault(SortType.NEWEST) + : new CursorPagingRequest(null, null).pagingOrDefault(SortType.NEWEST); + return savedFoodTruckService.getSavedFoodTrucks(normalized, member);
- 동일 패턴이 존재한다면 일괄 적용을 고려해 주세요(예: OwnerService). 컨트롤러 레벨에서 비-null을 보장한다면 해당 근거를 주석으로 남겨도 좋습니다.
src/main/java/konkuk/chacall/domain/owner/application/OwnerService.java (1)
129-130: 여기도 NPE 가능성 동일
request가 null일 경우pagingOrDefault호출에서 NPE가 발생할 수 있습니다. MemberService와 동일하게 방어 로직 권장합니다.예시:
- CursorPagingRequest cursorPagingRequest = request.pagingOrDefault(SortType.NEWEST); - return myFoodTruckService.getMyFoodTrucks(cursorPagingRequest, ownerId); + CursorPagingRequest normalized = (request != null) + ? request.pagingOrDefault(SortType.NEWEST) + : new CursorPagingRequest(null, null).pagingOrDefault(SortType.NEWEST); + return myFoodTruckService.getMyFoodTrucks(normalized, ownerId);
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
src/main/java/konkuk/chacall/domain/member/application/MemberService.java(1 hunks)src/main/java/konkuk/chacall/domain/owner/application/OwnerService.java(1 hunks)src/main/java/konkuk/chacall/global/common/dto/CursorPagingRequest.java(1 hunks)src/main/java/konkuk/chacall/global/common/dto/HasPaging.java(1 hunks)
🔇 Additional comments (1)
src/main/java/konkuk/chacall/global/common/dto/CursorPagingRequest.java (1)
18-23: HasPaging 구현으로 기본값 주입 경로 확보 — 좋습니다Record가 HasPaging을 구현하고
cursorPagingRequest()가this를 반환하므로 표준화된 기본값 처리 흐름이 완성되었습니다. 별다른 이슈 없습니다.
#️⃣연관된 이슈
📝작업 내용
요청 DTO 의 필드로 CursorPagingRequest 를 포함하여 요청하는 형식이 아니라, CursorPagingRequest 를 단일로 사용하는 API 들에서 cursor, size 값이 정상적으로 기본값 설정이 되지 않는 오류를 확인하였습니다.
CursorPagingRequest 자체에서는 HasPaing 인터페이스를 활용하지 않았기 때문인데, 해당 문제를 해결하고자 CursorPagingRequest 도 마찬가지로 HasPaging 인터페이스를 구현하도록 함으로써 문제를 해결하였습니다.
스크린샷 (선택)
💬리뷰 요구사항(선택)
Summary by CodeRabbit
릴리스 노트