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

강원대 FE_허윤수 4주차 과제 STEP3 #53

Open
wants to merge 56 commits into
base: sugoring
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
d900b8b
docs: 전체 요구사항 정리
Jul 16, 2024
ae30587
chore: mock 데이터 api 경로 수정
Jul 16, 2024
c9d7065
docs: step1 상세 요구사항 정리
Jul 16, 2024
ffb94da
feat: 상품 정보 표시 (상품 이미지, 브랜드, 이름, 가격)
Jul 17, 2024
5ec38e5
feat: "카톡 친구가 아니어도 선물 코드로 선물 할 수 있어요!" 문구 표시
Jul 17, 2024
47d763d
feat: 상품 옵션 선택 컴포넌트 구현
Jul 17, 2024
546c1dd
feat: 버튼 클릭 시 페이지 이동 처리
Jul 17, 2024
bf8c4ca
feat: 상품 상세 페이지에 컴포넌트 통합
Jul 17, 2024
b62d3aa
feat: useGetProductDetail 및 useGetProductOptions 훅스 구현
Jul 17, 2024
cc1a3a6
feat: 상품 상세 페이지에서 API 데이터 사용
Jul 17, 2024
94ef1c9
feat: Update the router configuration to include the product detail p…
Jul 17, 2024
11cc6bb
feat: Add the new route path for the product detail page in RouterPath
Jul 17, 2024
555bb85
fix: Correct default export for ProductDetailPage and update import i…
Jul 17, 2024
4046008
feat: Add navigation to ProductDetail page on product click in ThemeG…
Jul 17, 2024
f7f401a
feat: Add navigation to ProductDetail page on product click in GoodsR…
Jul 17, 2024
26bd5c8
feat: Install Chakra UI
Jul 17, 2024
77e0d28
feat: 상품 상세 정보 API 연동 (/api/v1/products/{productId}/detail)
Jul 17, 2024
72accfb
fix: 상품 상세 페이지 파일 수정
Jul 17, 2024
d5a01a3
fix: api 경로 수정 (/api/v1/ --> /v1/)
Jul 17, 2024
cab7162
fix: 상품 상세 페이지 기능 구현 초기화
Jul 17, 2024
8ad30b8
docs: step1 요구사항 재정리
Jul 17, 2024
7df9895
feat: 상품 상세 페이지 개선: API 데이터 구조 변경
Jul 17, 2024
3388336
fix: 상품 상세 페이지 기능 개선 및 오류 수정
Jul 17, 2024
bfcfccb
refactor: 상품 상세 정보 및 옵션 조회 훅 리팩토링
Jul 17, 2024
12c9e47
feat: 상품 관련 API 훅 분리 및 개선
Jul 17, 2024
a01472e
fix: ProductOption 인터페이스의 id 타입을 string에서 number로 수정
Jul 17, 2024
e2d30b4
design: 카카오 선물하기 디자인
Jul 17, 2024
c1866c0
design: 모노톤 스타일
Jul 17, 2024
8a38338
feat: 선물과 함께 보낼 메세지 입력란 추가
Jul 17, 2024
7eda134
feat: 주문 상품 정보 표시 추가
Jul 17, 2024
2edcd47
feat: 결제 수단 선택 UI 추가
Jul 17, 2024
da83f27
feat: 결제 정보 입력 UI 추가
Jul 17, 2024
68447c2
feat: 최종 결제 금액 표시 추가
Jul 17, 2024
1280c9f
feat: 라우터 설정에 PaymentPage 추가
Jul 17, 2024
6d62898
feat: 경로 설정 파일 수정
Jul 17, 2024
ee28314
feat: getDynamicPath를 사용하여 동적 경로를 생성
Jul 17, 2024
924f1ef
fix: payment 경로 수정
Jul 19, 2024
e4aba3c
design: 결제 페이지 레이아웃을 두 개의 주요 섹션으로 분할
Jul 19, 2024
624abf8
feat: 결제 페이지에 커스텀 버튼 컴포넌트 적용
Jul 19, 2024
c2fb361
feat: 커스텀 입력 필드 컴포넌트를 사용하여 결제 페이지 개선
Jul 19, 2024
3bbedd1
design: 결제 페이지 UI 개선 및 스타일 적용
Jul 19, 2024
0db792d
docs: step1 요구사항 구현 체크
Jul 19, 2024
8c12b70
docs: step2 기능 요구사항 정리
Jul 19, 2024
07de0a2
feat(payment): 카드 메시지 미입력 시 안내 메시지 표시
Jul 19, 2024
36e1b63
feat: 카드 메시지 100자 초과 시 안내 메시지 표시
Jul 19, 2024
234f74f
feat: 현금영수증 체크 시 번호 입력 여부 확인
Jul 19, 2024
a18ed64
feat: 현금영수증 번호는 숫자만 입력 가능하도록 제한
Jul 19, 2024
db8babc
docs: step2 기능 요구사항 구현
Jul 19, 2024
218868f
docs: step3 기능 요구사항 정리
Jul 19, 2024
86cd54b
chore: React Hook Form 설치
Jul 19, 2024
f63244e
feat(payment): React Hook Form 적용 및 폼 기본 설정
Jul 19, 2024
83e0fd3
feat: 현금영수증 체크 시 번호 입력 여부 확인
Jul 19, 2024
1f589e3
fix: 현금영수증 번호는 숫자만 입력 가능하도록 제한
Jul 19, 2024
d414ec1
feat: 카드 메시지 미입력 시 안내 메시지 표시
Jul 19, 2024
cf1cbc2
feat: 카드 메시지 100자 초과 시 안내 메시지 표시
Jul 19, 2024
dfe450d
docs: step3 기능 요구사항 구현
Jul 19, 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
76 changes: 75 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,75 @@
# 카카오 테크 캠퍼스 - 프론트엔드 카카오 선물하기 편
# React Product Order

## 개요

본 저장소는 FE 카카오 선물하기 4주차 과제 (2024-07-15 ~ 2024-07-19)를 위한 상품 주문 구현을 담고 있습니다. 상세한 학습 내용은 [Notion 노트](https://www.notion.so/TIL-FE-25dbeb894e884b889eca0fa3e4e13904)에서 확인할 수 있습니다.

---

## 상품 주문 프로세스

### 0단계 - 기본 코드 준비

---

### 1단계 - 상품 상세 페이지 & 상품 결제하기 폼 구현

- **UI 프레임워크:** `chakra-ui` 또는 직접 구현한 UI 컴포넌트만 사용 (외부 라이브러리 사용 금지)
- **폼 상태 관리:** React 기본 기능 (`form`, `ref`, `state`)으로 폼 상태 관리 (외부 라이브러리 사용 금지)

- **상품 상세 페이지 (`@/pages/ProductDetail`)**
- [x] `/components/features/Theme/ThemeGoodsSection` 또는 `/components/features/Home/GoodsRankingSection/List`에서 상품 ID (productId)를 전달받아 페이지 이동
- [x] 유효하지 않은 productId일 경우 메인 페이지 (/)로 리다이렉트
- **상품 정보 표시**
- [x] `/v1/products/{productId}/detail` API 호출하여 데이터 불러오기
- [x] 상품 ID (id)
- [x] 상품명 (name)
- [x] 이미지 URL (imageURL)
- [x] 브랜드 정보 (brand)
- [x] 기본 가격 (basicPrice)
- **상품 옵션 선택**
- [ ] `/v1/products/{productId}/options` API 호출하여 데이터 불러오기
- [ ] 옵션 목록 (`optionId`, `optionName`, `optionPrice`, `subOptions`)
- **"나에게 선물하기" 버튼**
- [x] 로그인 상태: 주문 결제 페이지 (`@/pages/Payment`)로 이동하며, productId 전달
- [x] 비로그인 상태: 로그인 페이지 (`@/pages/Login`)로 이동

- **상품 결제 페이지(`@/pages/Payment`)**
- [x] "선물과 함께 보낼 메세지" 입력란
- [x] `/v1/products/{productId}/detail` API 호출하여 주문 상품 정보 표시 (이미지, 브랜드, 이름)
- [x] 결제 정보 입력 (현금영수증, 소득공제 등)
- [x] 최종 결제 금액 표시
- [x] "결제하기" 버튼 (클릭 시 "주문이 완료되었습니다" 알림)

---

### 2단계 - 유효성 검사 구현

- **상품 상세 페이지 (`@/pages/ProductDetail`)**
- **상품 옵션 선택**
- [ ] 상품 옵션을 선택할 때, `giftOrderLimit`을 초과할 수 없도록 제한

- **상품 결제 페이지 (`@/pages/Payment`)**
- **카드 메시지**
- [x] 카드 메시지를 입력하지 않은 경우, 안내 메시지를 표시
- [x] 카드 메시지가 100자를 초과할 경우, 안내 메시지를 표시
- **현금영수증**
- [x] 현금영수증 체크 시, 현금영수증 번호 입력 여부를 확인
- [x] 현금영수증 번호는 숫자만 입력 가능하도록 제한

---

### 3단계 - React Hook Form 리팩터링

- [x] 기존 폼을 React Hook Form으로 변경
- [x] 폼 필드와 유효성 검사를 관리

---

### 4단계 - 질문 답변

- 질문 1: 제어 컴포넌트 vs. 비제어 컴포넌트의 차이점, 제어 컴포넌트 사용 시나리오

- 질문 2: 다양한 input type의 종류와 특징

- 질문 3: label 태그의 역할, input field를 label로 감쌀 때의 동작 방식
20 changes: 10 additions & 10 deletions oas.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ info:
description: 'API'
version: 1.0.0
paths:
/api/v1/ranking/products:
/v1/ranking/products:
get:
parameters:
- in: query
Expand Down Expand Up @@ -38,7 +38,7 @@ paths:
required:
- products

/api/v1/themes:
/v1/themes:
get:
description: 모임 홈의 선물 테마 카테고리 목록을 불러와요.
responses:
Expand All @@ -56,7 +56,7 @@ paths:
required:
- themes

/api/v1/themes/{themeKey}/products:
/v1/themes/{themeKey}/products:
get:
description: 선물 테마 Key에 해당하는 선물 목록을 불러와요.
parameters:
Expand Down Expand Up @@ -112,7 +112,7 @@ paths:
404:
description: 선물 테마 Key에 해당하는 선물 테마가 없어요.

/api/v1/products/{productId}/detail:
/v1/products/{productId}/detail:
get:
description: 선물 id에 해당하는 선물 상세 정보를 불러와요.
parameters:
Expand All @@ -130,7 +130,7 @@ paths:
schema:
$ref: '#/components/schemas/ProductDetailData'

/api/v1/products/{productId}/options:
/v1/products/{productId}/options:
get:
description: 선물 id에 해당하는 선물 상세 옵션을 불러와요.
parameters:
Expand All @@ -147,7 +147,7 @@ paths:
https://gift.kakao.com/product/6875548 (deps 1개)
https://gift.kakao.com/product/5022423 (deps 0개) (0개여도 1개를 내려주면 좋을 듯)

/api/v1/message-card/templates:
/v1/message-card/templates:
get:
description: 메시지 카드 템플릿 목록을 불러와요. (별도의 카테고리는 없어요.)
responses:
Expand All @@ -163,7 +163,7 @@ paths:
items:
$ref: '#/components/schemas/MessageCardTemplateData'

/api/v1/my-account/info:
/v1/my-account/info:
get:
description: 내 정보를 불러와요.
responses:
Expand All @@ -174,7 +174,7 @@ paths:
schema:
$ref: '#/components/schemas/MyAccountInfoData'

/api/v1/my-account/wish/products:
/v1/my-account/wish/products:
get:
description: 내가 받고 싶어하는 선물 목록을 불러와요.
parameters:
Expand Down Expand Up @@ -222,7 +222,7 @@ paths:
- products
- pageInfo

/api/v1/my-account/point:
/v1/my-account/point:
put:
description: 내 포인트를 충전해요.
requestBody:
Expand All @@ -241,7 +241,7 @@ paths:
204:
description: 내 포인트를 수정했어요.

/api/v1/order:
/v1/order:
post:
description: 상품 주문 요청을 보내요.
requestBody:
Expand Down
Loading