일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- withmockuser
- 딥러닝
- Spring
- 스택
- BOJ
- 로지스틱회귀
- 백준
- 그리디
- 신경망기초
- 정렬
- REST API
- FNN
- RequestBody
- PS
- 책리뷰
- 코딩
- python3
- responsebody
- 에라토스테네스의체
- 쉬운딥러닝
- C++
- DP
- SpringBoot
- WebMvcTest
- Andrew Ng
- Spring Data JPA
- Backend
- 알고리즘
- web
- testing
- Today
- Total
꾸준히하자아자
카카오 쇼핑하기 클론프로젝트 #1 본문
1. 요구사항 시나리오를 보고 부족해 보이는 기능을 하나 이상 체크하여 README에 내용을 작성하시오.
- 화면 UI에 있는 톡딜가로 구매하기 기능
- 회원정보를 수정하는 기능
- 개별 상품마다 별점을 표기하는 기능
- (매진임박일때) 각 옵션별 남은 수량, 품절여부를 보여주는 기능
- 상품을 카테고리 형태로 볼 수 있는 기능
- 장바구니 조회 (수량 결정)에서 상품을 삭제하거나 특정 옵션을 삭제하는 기능
- 배송 관련 기능
- 결제하기 단계에서 쿠폰이나 상품권을 사용할 수 있는 기능
2. 제시된 화면 설계를 보고 해당 화면설계와 배포된 기존 서버의 API주소를 매칭하여 README에 내용을 작성하시오.
● (기능 1) 회원 가입
- 회원가입 버튼 클릭 시 : (/join) POST 요청
- 이메일 중복 체크를 해줘야 한다. (/check) POST 요청
● (기능 2) 로그인
- 로그인 버튼 클릭 시 : (/login) POST 요청
- 회원 정보를 저장해둔 데이터베이스를 검색하여 해당 사용자가 유효한 사용자인지 판단하고 유효한 사용자일 경우 JWT Token을 반환한다.
● (기능 3) 로그아웃
- 로그아웃은 프론트에서 처리
● (기능 4) 전체 상품 목록 조회
- (/products?page={number}) GET 요청
- 전체 상품 목록 페이지에 들어가면 API를 호출하여 page값에 따라 상품의 데이터를 보여준다.
- 추후에 판매자가 새로운 상품을 등록하고 싶을 때 상품등록 API가 필요할 것 같다.
● (기능 5) 개별 상품 상세 조회
- (/products/{id}) GET 요청
- 개별 상품 페이지에 들어가면 해당 API를 호출하여 상품의 데이터를 보여준다.
● (기능 6) 상품 옵션 선택
이미 선택된 옵션은 다시 선택이 불가능하게 해야한다.
● (기능 7) 옵션 확인 및 수량 결정
선택한 상품 옵션을 재확인하고 수량을 결정한다. 선택한 옵션과 수량에 따라 합계 금액이 출력된다.
● (기능 8) 장바구니 담기
- (/carts/add) POST 요청
- 장바구니 담기 버튼 클릭 시 옵션의 id와 갯수가 저장된다.
● (기능 9) 장바구니 보기 (조회)
- (/carts) GET 요청
- 장바구니에 담았던 상품들의 옵션과 갯수 정보를 출력하는 API를 호출한다.
● (기능 10) 장바구니 상품 옵션 확인 및 수량 결정 (주문하기 - 장바구니 수정)
- (/carts/update) POST 요청
- 장바구니에 담았던 옵션들의 수량을 수정할 수 있다.
● (기능 11) 결제
- (/orders/save) POST 요청
- 결제하기 버튼을 누르면 장바구니에 있는 물품들이 삭제된다. 그리고 주문아이템 테이블에 채워진다.
● (기능 12) 주문 결과 확인
- (/orders/{order_id}) GET 요청
- 결제가 된 상품명, 주문번호, 옵션 이름을 출력하는 API를 호출한다.
3. 응답 데이터 확인하면서 시나리오에 부족한 데이터 확인
/carts/update (POST)
- 주문하기 - (장바구니 수정)에서 장바구니에 담겨있는 물품들 수량 업데이트(줄이거나 늘리거나)할 때 이전에 6. 장바구니 담기 에서 담았던 물품들과의 cartId가 다르면 안된다.
(담았던 물품에 존재하지 않는 cartId를 수정하려고 했을 때)
{
"success": false,
"response": null,
"error": {
"message": "장바구니에 없는 상품은 주문할 수 없습니다 : 3",
"status": 400
}
}
- 주문하기 - (장바구니 수정)에서 두 물품의 cartId가 같은 경우
{
"success": false,
"response": null,
"error": {
"message": "동일한 장바구니 아이디를 주문할 수 없습니다",
"status": 400
}
}
/orders/save (POST)
- 결제하기 (주문 인서트)에서 장바구니에 있던 물품들을 모두 결제하고 (POST 요청 보냄) 또 다시 요청을 보내면 장바구니에 아무 내역이 존재하지 않는다는 시나리오가 필요하다.
{
"success": false,
"response": null,
"error": {
"message": "장바구니에 아무 내역도 존재하지 않습니다",
"status": 404
}
}
/orders/1 (GET)
- 주문 결과 확인 에서 없는 주문을 요청하면 주문을 찾을 수 없다는 에러 메세지
{
"success": false,
"response": null,
"error": {
"message": "해당 주문을 찾을 수 없습니다 : 3",
"status": 404
}
}
4. 테이블 설계를 하여 README에 ER-Diagram을 추가하여 제출하시오.
-- -----------------------------------------------------
-- Table `kakao_shop`.`user`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `kakao_shop`.`user` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(45) NOT NULL,
`email` VARCHAR(45) NOT NULL,
`password` VARCHAR(45) NOT NULL,
`date` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`))
-- -----------------------------------------------------
-- Table `kakao_shop`.`product`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `kakao_shop`.`product` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`image` VARCHAR(45) NULL,
`price` INT NULL DEFAULT NULL,
`date` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`))
-- -----------------------------------------------------
-- Table `kakao_shop`.`options`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `kakao_shop`.`options` (
`id` INT NOT NULL,
`name` VARCHAR(45) NOT NULL,
`price` INT NOT NULL,
`date` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `product_id`
FOREIGN KEY (`id`)
REFERENCES `kakao_shop`.`product` (`id`))
-- -----------------------------------------------------
-- Table `kakao_shop`.`cart`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `kakao_shop`.`cart` (
`cart_id` INT NOT NULL AUTO_INCREMENT,
`quantity` VARCHAR(45) NOT NULL,
`user_id` INT NOT NULL,
`options_id` INT NOT NULL,
PRIMARY KEY (`cart_id`),
INDEX `fk_cart_user1_idx` (`user_id` ASC) VISIBLE,
INDEX `fk_cart_options1_idx` (`options_id` ASC) VISIBLE,
CONSTRAINT `fk_cart_user1`
FOREIGN KEY (`user_id`)
REFERENCES `kakao_shop`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_cart_options1`
FOREIGN KEY (`options_id`)
REFERENCES `kakao_shop`.`options` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
-- -----------------------------------------------------
-- Table `kakao_shop`.`order`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `kakao_shop`.`order` (
`id` INT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL,
PRIMARY KEY (`id`),
INDEX `fk_order_user1_idx` (`user_id` ASC) VISIBLE,
CONSTRAINT `fk_order_user1`
FOREIGN KEY (`user_id`)
REFERENCES `kakao_shop`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
-- -----------------------------------------------------
-- Table `kakao_shop`.`order_item`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `kakao_shop`.`order_item` (
`id` INT NOT NULL,
`quantity` INT NOT NULL,
`price` INT NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_option_id`
FOREIGN KEY (`id`)
REFERENCES `kakao_shop`.`options` (`id`),
CONSTRAINT `fk_order_id`
FOREIGN KEY (`id`)
REFERENCES `kakao_shop`.`order` (`id`))
'프로젝트 > 카카오 쇼핑하기 web' 카테고리의 다른 글
카카오 쇼핑하기 클론프로젝트 #4 (0) | 2023.08.22 |
---|---|
카카오 쇼핑하기 클론프로젝트 #3 (0) | 2023.08.09 |
카카오 쇼핑하기 클론프로젝트 #2 (0) | 2023.07.07 |