Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[2단계 - 상품 목록] 해리(최현웅) 미션 제출합니다. #56

Merged
merged 41 commits into from
Jun 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
652d236
chore: 사용하지 않는 파일 삭제
hwinkr Jun 6, 2024
fff5b2f
config(test): 모킹 데이터 폴더구조 변경, 장바구니와 상품 목록 네트워크 요청 핸들러 분리
hwinkr Jun 8, 2024
c6f2481
test(prev-tests): 스텝 1 테스트 파일 삭제
hwinkr Jun 8, 2024
70da210
chore(SelectBox): 사용하지 않는 컴포넌트 삭제
hwinkr Jun 8, 2024
7c9ebd4
config(package.json): 리액트 쿼리, 모달 라이브러리 의존성 추가
hwinkr Jun 8, 2024
e53bb80
docs(README.md): 스텝 2 기능 요구 사항 정리, 명세서 작성
hwinkr Jun 8, 2024
ada2780
config(App): 리액트 쿼리 프로바이더 컴포넌트 추가
hwinkr Jun 8, 2024
4d592c9
feat(useAddCartItem): 장바구니에 상품을 담을 수 있는 기능 구현
hwinkr Jun 8, 2024
957a540
feat(usePatchCartItemQuantity): 상품 수량 조절 기능 구현
hwinkr Jun 8, 2024
8bd562a
feat(useFetchProducts): useSuspenseInfiniteQuery를 활용한상품 목록 무한 스크롤 기능 구현
hwinkr Jun 8, 2024
27bb6ad
feat(InfiniteScrollContainer): intersectionObserver 기능 제공 컴포넌트 구현
hwinkr Jun 8, 2024
8daf4b4
feat(CartItemModal): 장바구니 모달 기능 구현 및 테스트
hwinkr Jun 8, 2024
a17db6d
docs(README.md): 기능 요구 사항 완성
hwinkr Jun 8, 2024
03ac036
chore(assets): 상품 수량 조절 버튼 설정
hwinkr Jun 8, 2024
bf69304
feat(DropDown): Context API + Compound Component를 활용한 드롭다운 컴포넌트 구현
hwinkr Jun 8, 2024
ab45526
feat(ProductItemSkeleton): 데이터 페칭 중에 사용할 상품 스켈레톤 컴포넌트 구현
hwinkr Jun 8, 2024
af76188
feat(ProductItem): 리액트 쿼리를 활용한 커스텀 훅을 사용하는 상품 목록 컴포넌트 구현
hwinkr Jun 8, 2024
c8513b9
feat(useProductOption): 상품 목록 필터링 책임을 가지는 useProductOption 커스텀 훅 구현
hwinkr Jun 8, 2024
e34629c
config(api): 클라이언트에서 정의한 도메인 객체로 데이터를 반환하도록 수정
hwinkr Jun 8, 2024
c5dfbd3
feat(Stepper): 상품 수량을 조절하는 Stepper 컴포넌트 구현
hwinkr Jun 8, 2024
4c198f1
feat(ShopHeader): 장바구니에 담긴 상품 수량을 표현하는 헤더 컴포넌트 구현
hwinkr Jun 8, 2024
375add5
chore(assets): 장바구니 수량 변경 버튼 export 추가
hwinkr Jun 8, 2024
daa97f8
chore(error-messages): 장바구니 수량 변경 중 예외가 발생했을 경우, 전달할 메시지 추가
hwinkr Jun 8, 2024
a5aa0cf
config(production option type): 상품 목록 필터링 옵션 타입 설정
hwinkr Jun 8, 2024
a8b5c71
chore(query-keys): 리액트 쿼리 훅에서 사용할 쿼리키 상수 객체로 설정
hwinkr Jun 8, 2024
fe1b4c8
feat(useModal): 모달 렌더링 상태 관리 책임을 가지는 커스텀 훅 구현
hwinkr Jun 8, 2024
194b69f
test(util): 테스트 환경에서 렌더링 할 커스텀 훅 유틸 함수 구현
hwinkr Jun 8, 2024
7d8f21e
config(package.json): 의존성 재설치
hwinkr Jun 8, 2024
66deb3f
config(tsconfig.json): 컴파일 옵션에 vite/client 추가
hwinkr Jun 8, 2024
4915caa
chore: 사용하지 않는 훅, 테스트 삭제
hwinkr Jun 13, 2024
c475835
chore(tsconfig): type에 jest 추가
hwinkr Jun 13, 2024
9b8c4cb
refactor(ShopHeader): 상품 목록 헤더 컴포넌트에서 예외를 보여주도록 변경
hwinkr Jun 13, 2024
1c1dcb8
chore: 불필요한 주석 제거
hwinkr Jun 13, 2024
d260110
refactor: 커스텀 훅에서 예외 처리 책임 분리
hwinkr Jun 13, 2024
356ade8
feat(useCartQuery): 장바구니 상품 정보 불러오는 커스텀 훅 추가 구현
hwinkr Jun 13, 2024
243d3c3
feat(useCartItem): 장바구니 상품 목록 페칭 커스텀 훅, 파생 상태 관리 커스텀 훅 분리
hwinkr Jun 13, 2024
85c121b
chore: HTML Attribute와 Css Props를 구분하기 위한 $ 추가
hwinkr Jun 13, 2024
506e9cd
refactor: 상품 아이템 컴포넌트에서 예외 토스트를 띄우는 책임 이전
hwinkr Jun 13, 2024
313eebc
feat: 장바구니 상품 아이템 컴포넌트에서 예외 피드백을 전달하도록 책임 이전
hwinkr Jun 13, 2024
4b3e491
chore: 불필요한 주석 제거
hwinkr Jun 13, 2024
971af49
test: 커스텀 훅 이름 변경 반영
hwinkr Jun 13, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,3 +112,65 @@ API
Test

테스트는 UI와 관계 없이 API 요청 상태에 따른 변화를 검증한다.

## 2단계 구현 사항

### 1단계 : 결국 우리가 무엇을 하려는 거지?

사용자가 특정 물건을 구입하기 위해서 쇼핑몰 앱에 방문했을 때 사용자는 다음과 같은 행동들을 할 수 있다.

1. 구입하고 싶거나, 관심있는 상품들을 장바구니에 담는다

2. 담은 상품의 수량을 변경하거나, 장바구니에서 상품을 뺀다.

3. 장바구니 페이지(모달)에서 장바구니에 담긴 상품을 확인할 수 있다.

이 과정들을 더 매끄럽고, 자연스럽게, **더 안전하게** 할 수 있는 경험을 제공한다.

레벨 2에서는 다음 과정이 추가된다. ✨🧚

=> 내가 해결해야 하는 문제를 ‘잘’ 해결하기 위해서, 문제 해결 과정에 **React-Query**를 잘 녹여낸다.

### 2단계 : 핵심 기능을 1줄로 정의해보기

사용자가 상품 목록을 무한 스크롤을 활용하여 더 매끄럽게 확인할 수 있고, 장바구니에 상품을 담고 빼거나 수량을 변경할 수 있다.

### 🔑 키워드

서버 상태 관리, React Query

### 📍 학습 목표

React Query를 사용하여 서버 상태를 관리할 수 있다.

API 연동 과정에서 발생하는 다양한 에러 상황에 대응하고 사용자에게 피드백을 제공할 수 있다.

### 🎯 기능 요구 사항

1. 상품 목록

- [x] 상품 목록에서 담기 버튼을 누르면, 수량을 조절할 수 있다.

2. 장바구니

- [x] 장바구니 담기: 상품을 장바구니에 담는 기능을 구현하고 장바구니 상태를 업데이트한다

- [x] 장바구니 모달: 장바구니 버튼을 클릭하면 모달로 장바구니에 담은 목록을 확인할 수 있어야 한다.

- [x] 장바구니에서도 수량을 조절할 수 있어야 한다.

### ✅ 프로그래밍 요구사항

이전 미션의 프로그래밍 요구사항은 기본으로 포함한다.

- Async

비동기 처리 로직을 react query를 사용해 리팩터링한다.

- [x] useSuspenseInfiniteQuery를 사용해서 데이터를 페칭한다.

- [x] useMutation을 사용해서 서버 상태를 변경한다.

- Test

- [x] 핵심 기능 요구 사항에 대해 테스트 케이스를 작성한다.
Loading