Repository navigation
Conversation
page/size/sort 쿼리와 페이지 메타를 실은 목록 응답, 조회 조건을 통째로 나르는 ReportListCriteria·findPage 계약, 목록 페이저 렌더를 spec으로 먼저 고정한다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YSE2AjYBMmEAdjMjaqCUYu
GET /reports가 page/size/sort를 받아 items와 페이지 메타(number·size· totalItems·totalPages)를 함께 돌려준다. 조회 조건은 ReportListCriteria 하나로 묶어 Repository.findPage까지 그대로 흐르게 했다. 정렬은 이름 있는 프리셋(latest)이라 축이 늘어나면 REPORT_SORT_OPTIONS와 REPORT_SORT_SPECS에만 더하면 되고, 검색이 붙으면 criteria에 조건을 더해 같은 경로로 filter를 만든다. 프론트는 ViewModel이 현재 페이지를 들고 목록 하단에 페이저를 그린다. 정적 export라 페이지 번호는 URL이 아니라 컴포넌트 상태로만 둔다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YSE2AjYBMmEAdjMjaqCUYu
?page= 쿼리를 읽어 조회하고, 페이지 이동은 URL을 바꾸는 계약을 spec으로 먼저 고정한다. 쿼리 값이 정수가 아니면 첫 페이지로 본다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YSE2AjYBMmEAdjMjaqCUYu
ViewModel이 ?page= 쿼리를 읽어 조회하고 페이지 이동은 router.push로 URL을 바꾼다. 새로고침·뒤로가기·링크 공유가 그대로 살아난다. 첫 페이지는 쿼리 없이 /reports로 둔다. useSearchParams가 정적 export에서 Suspense 경계를 요구하므로 목록 본문을 ReportListPageClient로 떼어내고 page.tsx가 껍데기와 경계를 갖는다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YSE2AjYBMmEAdjMjaqCUYu
기본값 적용·page/size/sort → criteria 변환·빈 페이지 메타를 유닛으로 덮는다. 지금까지 이 경로는 pnpm test에 포함되지 않는 e2e로만 확인됐다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YSE2AjYBMmEAdjMjaqCUYu
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YSE2AjYBMmEAdjMjaqCUYu
같은 조건의 재요청을 TTL 동안 캐시가 흡수하고, 아직 끝나지 않은 같은 요청은 하나로 합치며, 실패는 캐시하지 않는 계약을 spec으로 먼저 고정한다. "다시 시도"는 캐시를 우회한다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YSE2AjYBMmEAdjMjaqCUYu
회의록은 회의가 끝나는 순간에만 바뀌므로 같은 조건의 목록 요청을 TTL 1시간 동안 클라이언트에서 흡수한다. 캐시는 결과가 아니라 Promise를 담아 아직 끝나지 않은 같은 요청도 하나로 합치고, 실패한 요청은 남기지 않는다. "다시 시도"는 캐시를 버리고 다시 받아온다. 그 사이 새로 끝난 회의록은 다시 시도나 새로고침으로 보인다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YSE2AjYBMmEAdjMjaqCUYu
hover 배경이 글자에 바로 붙지 않도록 항목 안쪽 좌우 여백을 키우고, 배경과 어긋나 보이던 항목 사이 구분선을 걷어냈다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YSE2AjYBMmEAdjMjaqCUYu
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YSE2AjYBMmEAdjMjaqCUYu
구분선은 li에 둬서 hover 배경이 선을 덮지 않는다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YSE2AjYBMmEAdjMjaqCUYu
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
회의록 목록에 전통적인 방식의 페이지네이션을 추가하고, 목록 응답을 클라이언트 캐시를 도입하여 1시간동안 캐시한다. 이를 통해 뒤로가기 등의 작업으로 목록 api 요청을 다시 재요청하는 등의 행위를 줄인다. 새로고침 시 캐시를 무효화하여 변경사항을 즉시 확인할 수 있도록 돕는다.