Skip to content

여행 일정 리스트 출력#20

Merged
SongMinQQ merged 5 commits into
developfrom
feat/schedule-list
Mar 11, 2026
Merged

여행 일정 리스트 출력#20
SongMinQQ merged 5 commits into
developfrom
feat/schedule-list

Conversation

@SongMinQQ

Copy link
Copy Markdown
Contributor

#️⃣연관된 이슈

#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
}

반영 내용

  1. 일정 목록 응답 타입 최신화
  • count를 필수 값으로 반영
  • items[].id를 최신 응답 기준의 일정 식별자로 반영
  • 현재 문서 예시에서 빠진 thumbnailUrl, memberLimit은 optional로 처리
  1. 게스트 및 비멤버 UI 처리 변경
  • items가 비어 있어도 count > 0이면 잠금 메시지 카드만 count 개수만큼 렌더링
  • count === 0이면 기존 empty state UI 유지
  • 권한이 없는 사용자는 일정 생성 버튼을 노출하지 않음
  1. 일정 카드 링크 처리
  • 멤버 응답에서 items[].id가 있으면 /group/{groupId}/schedules/{id} 링크로 카드 렌더링
  1. 무한 스크롤 적용
  • useGroupSchedulesQueryuseInfiniteQuery 기반으로 변경
  • cursor, nextCursor, hasNext를 사용해 다음 페이지 로드 연결
  • shared/hooks/use-virtualized-scroll로 스크롤 컨테이너 내부 가상 스크롤 처리
  • 문서 기준 페이지 크기를 size=10으로 조정
  • 게스트 잠금 카드도 count가 많으면 같은 스크롤 컨테이너를 사용하도록 정리

변경 파일

  • entities/schedule/model/api/getGroupSchedules.ts
  • entities/schedule/model/api/types.ts
  • entities/schedule/model/mappers.ts
  • entities/schedule/queries/useGroupSchedulesQuery.ts
  • features/schedule/list/ui/GroupSchedulesContent.tsx

Playwright 검증

Success Case 1

  • MEMBER + items[0].id = 17 mock 응답으로 일정 카드 렌더링 확인
  • 결과: 여행 일정 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: 12 mock 응답으로 잠금 카드 렌더링 확인
  • 결과: 잠금 메시지 카드 렌더링, 스크롤 컨테이너 생성, 일정 생성 버튼 미노출 확인

실제 API 확인

  • 비로그인 상태에서 GET /travels/1?size=100 응답 확인
  • 결과: 200 OK, { "items": [], "nextCursor": null, "hasNext": false, "count": 0 }
  • 실제 3000번 페이지에서도 비로그인 기준 일정 생성 버튼 미노출 확인

남은 리스크

  • use-virtualized-scroll은 고정 row height 전제라 카드 높이가 크게 바뀌면 간격 보정이 추가로 필요할 수 있음
  • 실제 dev 환경에서 일정이 11개 이상인 멤버 그룹 실데이터는 mock 기준으로만 검증했고, 실서버 다페이지 응답은 추가 확인 필요
  • 비로그인 상태에서 보이는 세션 만료 토스트 문제는 travels가 아니라 공통 GET /users/me 401 처리 쪽을 별도로 봐야 함

스크린샷 (선택)

image

@SongMinQQ SongMinQQ self-assigned this Mar 11, 2026
@SongMinQQ SongMinQQ added the enhancement New feature or request label Mar 11, 2026
@SongMinQQ SongMinQQ linked an issue Mar 11, 2026 that may be closed by this pull request
@SongMinQQ SongMinQQ changed the title Feat/schedule list 여행 일정 리스트 출력 Mar 11, 2026
@SongMinQQ SongMinQQ merged commit 6cdcc17 into develop Mar 11, 2026
@SongMinQQ SongMinQQ deleted the feat/schedule-list branch March 11, 2026 10:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

일정 목록 출력

1 participant