Skip to content

Feat(client): HASHI-107 예약 상세 조회 및 취소 API 연동 - #91

Merged
jyeon03 merged 7 commits into
developfrom
feat/HASHI-107-reservation-detail
Jul 13, 2026
Merged

jyeon03 merged 7 commits into
developfrom
feat/HASHI-107-reservation-detail

Conversation

@jyeon03

@jyeon03 jyeon03 commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

📌 Summary

예약 상세 페이지의 예약 상세 조회/예약 취소 API를 연동하고, 공통 API 클라이언트에 인증 헤더 및 성공 응답 envelope 처리 기능을 추가했습니다.

Jira: HASHI-107

📚 Tasks

  • 공통 API 클라이언트에 accessToken 기반 Authorization 헤더 주입 로직 추가
  • 성공 응답의 message를 사용할 수 있도록 requestSuccessResponse 추가
  • 예약 상세 조회 API 연동
    • GET /api/v1/reservations/{reservationId}
  • 예약 취소 API 연동
    • POST /api/v1/reservations/{reservationId}/cancel
  • 예약 취소 성공 시 서버 응답 message로 toast 표시
  • 예약 취소 실패 시 공통 mutation error handler를 통해 실패 toast 표시
  • 예약 취소 요청 중 취소 확인/닫기 버튼 비활성화
  • 취소 요청 중 모달이 닫히지 않도록 방어 처리
  • 취소된 예약(CANCELED) 직접 URL 접근 시 NotFoundPage 표시
  • 예약 상세 mock 데이터 제거 및 API 응답 기반 view model 생성
  • API, 페이지 동작, 공통 request 관련 테스트 추가 및 수정

🔎 Description

공통 API 처리

apiClient에서 localStorage의 accessToken을 읽어 Authorization: Bearer {token} 헤더를 자동으로 주입하도록 수정했습니다.

  • 기존 request 함수는 성공 응답의 data만 반환하는 구조였기 때문에, 예약 취소 성공 toast에 필요한 서버 응답 message를 사용할 수 없었습니다. 이를 위해 성공 응답 envelope 전체를 반환하는 requestSuccessResponse를 추가했습니다.
  • 기존 request의 반환 형태는 유지해서 기존 API 호출부의 동작은 변경하지 않았습니다.

예약 상세 조회

예약 상세 페이지는 route param의 reservationId를 양의 정수로 검증한 뒤, 유효한 경우에만 예약 상세 조회 API를 호출합니다.

  • 유효하지 않은 reservationId이거나 서버에서 404 응답을 내려주는 경우 NotFoundPage를 표시합니다. 또한 서버가 취소된 예약(reservationStatus: CANCELED)을 정상 응답하더라도, 상세 화면 표시 대상이 아니므로 NotFoundPage로 처리했습니다.
  • API 응답은 createReservationDetailViewModel에서 UI에 필요한 형태로 변환합니다.

예약 취소

예약 취소 버튼 클릭 시 확인 모달을 띄우고, 모달에서 취소하기를 누르면 예약 취소 API를 호출합니다.

  • 예약 취소 성공 시 서버 응답의 message를 toast로 표시한 뒤, 예약 정보 페이지의 진행 중 탭(/my-reservations?status=IN_PROGRESS)으로 이동합니다.
  • 예약 취소 실패 시에는 공통 mutation error handler에서 실패 toast를 표시하므로, 페이지 hook에서는 별도의 실패 toast를 중복으로 띄우지 않습니다. 실패 시 모달 닫기와 페이지 이동도 수행하지 않습니다.
  • 예약 취소 요청이 진행 중일 때는 취소하기와 닫기 버튼을 모두 비활성화하고, 모달 닫힘 요청도 무시하도록 처리해 중복 요청과 중간 닫힘을 방지했습니다.

구조 정리

예약 상세 API 연동 관련 파일은 다음 책임으로 분리했습니다.

  • api: 서버 요청 함수
  • hooks: React Query query/mutation hook 및 페이지 상태 hook
  • utils/createReservationDetailViewModel: API 응답을 UI view model로 변환
  • utils/reservationDetailPolicy: route param 검증 및 상세 접근 정책 처리

불필요해진 mock 데이터 파일은 제거했습니다.

✅ Verification

  • pnpm --filter @hashi/client test
  • pnpm --filter @hashi/client typecheck
  • pnpm --filter @hashi/client lint
  • git diff --check

👀 To Reviewer

  • 예약 취소 실패 toast는 페이지에서 직접 처리하지 않고 공통 mutation error handler를 따르도록 했습니다.
  • 또한 취소된 예약은 서버에서 상세 응답이 내려오더라도 클라이언트 정책상 NotFoundPage로 처리했습니다.

📸 Screenshot

2026-07-13.3.27.17.mov

@jyeon03
jyeon03 requested a review from a team as a code owner July 12, 2026 18:33
@github-actions github-actions Bot added ✨ FEAT 새로운 기능 추가 🙄 지연 38기 WEB 백지연 labels Jul 12, 2026
@github-actions

Copy link
Copy Markdown

@yurimidaH yurimidaH left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤘🏿💕

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

@chungyo chungyo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨어요!!! 전체적인 흐름 잘 확인했습니다!
404/CANCELED 상태 처리, 취소 요청 중 모달 닫힘 방어, 공통 mutation error handler를 활용한 실패 toast 처리가 꼼꼼하게 구현된 것 같아요~

다만 아래 두 가지는 실제 사용자 동작에서 발생할 수 있어 인라인 코멘트로 남겼습니다.

  • 빠른 연속 클릭 시 취소 API가 중복 호출될 수 있는 부분
  • 취소 성공 후 상세 캐시가 남아 재진입 시 취소 전 화면이 표시될 수 있는 부분
    두 부분만 확인 및 보완 부탁드립니다. 이외에는 전반적으로 잘 구현된 것 같습니다! 고생하셨습니다 🙇‍♀️

@github-actions

Copy link
Copy Markdown

@jyeon03
jyeon03 merged commit 9773760 into develop Jul 13, 2026
7 checks passed
@jyeon03
jyeon03 deleted the feat/HASHI-107-reservation-detail branch July 13, 2026 07:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ FEAT 새로운 기능 추가 🙄 지연 38기 WEB 백지연

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants