여행 일정 리스트 출력#20
Merged
Merged
Conversation
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.
#️⃣연관된 이슈
#19
📝작업 내용
여행 일정 목록 페이지를 최신 API 응답 기준으로 다시 정리하고, 일정 목록에 무한 스크롤을 적용했다.
기존에는 비멤버 또는 비로그인 사용자가 일정 목록 API에서 에러를 받는 전제를 일부 사용하고 있었는데, 최신 명세 기준으로는
200 OK와 함께count를 내려주는 형태로 바뀌어 있어 그 기준으로 UI를 수정했다.이후 문서 기준
size최대값이 10으로 정리되면서,shared/hooks/use-virtualized-scroll을 사용해 멤버 일정 목록에 무한 스크롤을 연결했다.확인한 API 기준
여행 목록 조회 응답
{ "items": [ { "id": 1, "title": "제주도 뚜벅코 탐험", "description": "제주 맛집 투어", "startAt": "2026-03-01T00:00:00", "endAt": "2026-03-05T00:00:00", "memberCount": 3 } ], "nextCursor": 100, "hasNext": true, "count": 15 }반영 내용
count를 필수 값으로 반영items[].id를 최신 응답 기준의 일정 식별자로 반영thumbnailUrl,memberLimit은 optional로 처리items가 비어 있어도count > 0이면 잠금 메시지 카드만count개수만큼 렌더링count === 0이면 기존 empty state UI 유지items[].id가 있으면/group/{groupId}/schedules/{id}링크로 카드 렌더링useGroupSchedulesQuery를useInfiniteQuery기반으로 변경cursor,nextCursor,hasNext를 사용해 다음 페이지 로드 연결shared/hooks/use-virtualized-scroll로 스크롤 컨테이너 내부 가상 스크롤 처리size=10으로 조정count가 많으면 같은 스크롤 컨테이너를 사용하도록 정리변경 파일
entities/schedule/model/api/getGroupSchedules.tsentities/schedule/model/api/types.tsentities/schedule/model/mappers.tsentities/schedule/queries/useGroupSchedulesQuery.tsfeatures/schedule/list/ui/GroupSchedulesContent.tsxPlaywright 검증
Success Case 1
MEMBER+items[0].id = 17mock 응답으로 일정 카드 렌더링 확인여행 일정 1노출, 카드가 링크(<a>)로 렌더링,href=/group/1/schedules/17확인Success Case 2
MEMBER+ 1페이지 10건 + 2페이지 2건 mock 응답으로 무한 스크롤 확인cursor=10&size=10두 번째 요청 발생,/group/1/schedules/12링크 렌더링 확인Fail Case
GUEST+items: []+count: 12mock 응답으로 잠금 카드 렌더링 확인실제 API 확인
GET /travels/1?size=100응답 확인200 OK,{ "items": [], "nextCursor": null, "hasNext": false, "count": 0 }남은 리스크
use-virtualized-scroll은 고정 row height 전제라 카드 높이가 크게 바뀌면 간격 보정이 추가로 필요할 수 있음travels가 아니라 공통GET /users/me401 처리 쪽을 별도로 봐야 함스크린샷 (선택)