쇼핑몰 Pjt

Jaeminst·2022년 3월 3일
1

G팀 프로젝트


기능 명세

  • 사용자는 모든 상품을 조회할 수 있다.

  • 사용자는 검색어로 원하는 상품을 찾을 수 있다.

  • 사용자는 선택한 상품의 상세 페이지를 조회할 수 있다.

  • 사용자는 각 상품의 상세 페이지에서 즉시 구매할 수 있다.

  • 사용자는 장바구니에 원하는 상품을 넣을 수 있다.

  • 사용자는 장바구니에서 상품의 수량을 조절할 수 있다.

  • 사용자는 장바구니에서 원하지 않는 상품을 삭제할 수 있다.

  • 사용자는 장바구니에서 구매를 원하는 품목만 결제할 수 있다.

  • 사용자는 결제 단계에서 물품 가격의 합계를 확인할 수 있다.

  • 사용자는 결제내역을 확인할 수 있다.


시나리오 만들기

사용자 > 상품(상세 페이지), 장바구니 > 작업

  • 사용자 a는 가 상품의 상세 페이지에서 결제를 한다.

  • 사용자 b는 가 상품의 상세 페이지에서 수량을 조절을 하고 결제를 한다.

  • 사용자 c는 가 상품의 상세 페이지에서 장바구니에 담는다.

  • 사용자 d는 가 상품의 상세 페이지에서 수량을 조절하고 장바구니에 담는다.

  • 사용자 f는 장바구니에 담은 상품들을 결제한다.

  • 사용자 g는 장바구니에서 상품의 수량을 변경한다.

  • 사용자 h는 장바구니에서 상품을 선택하고 결제한다.

  • 사용자 i는 장바구니에서 상품을 선택하고 삭제한다.


ERD

작성 링크

Table users as U { // 사용자
  id int [pk, increment] // auto-increment
  full_name string
  email string
}

//----------------------------------------------//

//// -- LEVEL 2
//// -- Adding column settings

Table cartOrders { // 결제
  cartId int [ref: > carts.id] // inline relationship (many-to-one)
  totalAmount number
  orderSummary string
}

Table carts { // 장바구니
  id int [pk] // pk = primary key
  userId int [ref: > users.id]
  productId int [ref: > products.id]
  qty int // 담은 수량
}

//----------------------------------------------//

Table products { //상품
  id int [pk]
  name string
  price number
  stock int // 재고 수량
  tag string
  img string
}

Table directOrders { // 결제
  productId int [ref: > products.id] // inline relationship (many-to-one)
  totalAmount number
}

ERD 도식화


ERD - Rev.1

Table users as U { // 사용자
  id int [pk, increment] // auto-increment
  full_name string
  email string
  password int
}

//----------------------------------------------//

//// -- LEVEL 2
//// -- Adding column settings

Table cartOrders { // 결제
  orderId int [ref: > orders.id]
  cartId int [ref: > carts.id] // inline relationship (many-to-one)
}

Table carts { // 장바구니
  id int [pk] // pk = primary key
  userId int [ref: > users.id]
  productId int [ref: > products.id]
  qty int // 담은 수량
}

//----------------------------------------------//

Table products { //상품
  id int [pk]
  name string
  price number
  stock int // 재고 수량
  tag string
  img string
}

Table directOrders { // 결제
  orderId int [ref: > orders.id]
  userId int [ref: > users.id]
  productId int [ref: > products.id] // inline relationship (many-to-one)
  qty int
}

//----------------------------------------------

Table orders { //구매내역
  id int [pk]
  userId int
  productId int
  orderSummary string
  totalAmount number
}

ERD 도식화

Feedback

장바구니 결제와 상품 직접결제의 구분이 필요없어 보인다.


API 문서 작성

장바구니 조회

카테고리MethodEndpoint요청 바디
조회GET/CartsNone
  • 요청 HTTP
    GET http://localhost:3000/Carts

  • 요청 Head

{
  authorization: 'basic n09qnv28jqde829que892q9eu2q8jed892'
}
  • 응답 Body

상태코드 : 200

[
  {
    "userId": "6220d89ea6e069ba6fcfe39c",
    "product": [{
        "id": "a220e2qeqqe069ba6fcfe391",
      	"name": "GoldRing",
	    "price": 20000,
        "stock": 50,
        "img": "https://images.unsplash.com/photo-313124283",
    "qty": 1
    }]
  }
]

상태코드 : 401

{
  "Error": "사용자 인증에 실패하였습니다."
}

장바구니 추가

카테고리MethodEndpoint요청 바디
생성POST/Carts포함
  • 요청 HTTP
    POST http://localhost:3000/Carts

  • 요청 Head

{
  authorization: 'basic n09qnv28jqde829que892q9eu2q8jed892'
}
  • 요청 Body
[
  {
    "userId": "62235el3rj90wjfjk3w03jia",
    "productId": "r2qrewea6e0qwea6fcfe39c",
    "qty": 1
  }
]
  • 응답 Body

상태코드 : 201

{ "cartId": "eq2rzd5ea6e069ba6fcfe39c"}

상태코드 : 404

{ "Error": "Not Found"}

장바구니 삭제

카테고리MethodEndpoint요청 바디
삭제DELETE/Carts포함
  • 요청 HTTP
    DELETE http://localhost:3000/Carts

  • 요청 Head

{
  authorization: 'basic n09qnv28jqde829que892q9eu2q8jed892'
}
  • 요청 Body
[
  {
    "cartId": "eq2rzd5ea6e069ba6fcfe39c"
  }
]
  • 응답 Body

상태코드 200

[
  {
    "userId": "6220d89ea6e069ba6fcfe39c",
    "product": [{
        "id": "a220e2qeqqe069ba6fcfe391",
      	"name": "GoldRing",
	    "price": 20000,
        "stock": 50,
        "img": "https://images.unsplash.com/photo-313124283",
    "qty": 1
    }]
  }
]

상태코드 : 204

{
  "product": null,
  "ok": 1
}

장바구니 상품 수량 변경

카테고리MethodEndpoint요청 바디
변경PATCH/Carts포함
  • 요청 HTTP
    PATCH http://localhost:3000/Carts

  • 요청 Head

{
  authorization: 'basic n09qnv28jqde829que892q9eu2q8jed892'
}
  • 요청 Body
{
  "cartId": "eq2rzd5ea6e069ba6fcfe39c",
  "qty": 2
}
  • 응답 Body

상태코드 : 200

{
  "qty": 2
}

상태코드 : 404

{ "Error": "Not Found"}

상품 목록 조회

카테고리MethodEndpoint요청 바디
조회GET/productsNone
  • 요청 HTTP
    GET http://localhost:3000/products

  • 응답 Body

상태코드 200

[
    {
        "_id": "622198479f7ff16f7a25cc05",
        "name": "gold_ring",
        "price": 10000,
        "stock": 30,
        "tag": "goldring",
        "img": "https://media.thejewellershop.com/images/products/VR0209_01.jpg"
    },
    {
        "_id": "6221998e9f7ff16f7a25cc06",
        "name": "silver_ring",
        "price": 8000,
        "stock": 40,
        "tag": "silverring",
        "img": "https://img.joomcdn.net/e3dc678d68a8885e90648d9b59e4cc2acb210118_original.jpeg"
    },
]

상태코드 : 404

{ "Error": "Not Found"}

개별 상품 목록 조회

카테고리MethodEndpoint요청 바디
조회GET/products/:_idNone
  • 요청 HTTP
    GET http://localhost:3000/products/a220e2qeqqe069ba6fcfe391

  • 응답 Body

상태코드 : 200

{
  "id": "a220e2qeqqe069ba6fcfe391",
  "name": "SilverRing",
  "price": 20000,
  "stock": 50,
  "img": "https://images.unsplash.com/photo-313124283",
  "tag": "Ring"
}

상태코드 : 404

{ "Error": "Not Found"}

장바구니 결제

카테고리MethodEndpoint요청 바디
생성POST/cartsOrders포함
  • 요청 HTTP
    POST http://localhost:3000/orders

  • 요청 Head

{
  authorization: 'basic n09qnv28jqde829que892q9eu2q8jed892'
}
  • 요청 Body
{
  "userId": '6220d89ea6e069ba6fcfe39c',
  "carts": [{
    "userId": "6220d89ea6e069ba6fcfe39c",
    "productId": "622198479f7ff16f7a25cc05",
    "qty": 1
  },
  {
    "userId": "6220d89ea6e069ba6fcfe39d",
    "productId": "6221998e9f7ff16f7a25cc06",
    "qty": 1
  },
  {
    "userId": "6220d89ea6e069ba6fcfe39e",
    "productId": "62219a199f7ff16f7a25cc07",
    "qty": 1
  }]
}
  • 응답 Body

상태코드 : 201

{ "orderId": "ifm930wi90fe0624a6fce21a1"}

상태코드 : 404

{ "Error": "Not Found"}

상품 바로 결제

카테고리MethodEndpoint요청 바디
생성POST/directOrders포함
  • 요청 HTTP
    POST http://localhost:3000/orders

  • 요청 Head

{
  authorization: 'basic n09qnv28jqde829que892q9eu2q8jed892'
}
  • 요청 Body
{
  "userId": "6220d89ea6e069ba6fcfe39c",
  "productId": "62231a1aa5173f4665a52685",
  "qty": 1
}
  • 응답 Body

상태코드 : 201

{ "orderId": "f3wnofhwhf93hw9ufhddjmi"}

상태코드 : 404

{ "Error": "Not Found"}

결제 내역 조회

카테고리MethodEndpoint요청 바디
조회GET/ordersNone
  • 요청 HTTP
    GET http://localhost:3000/orders

  • 요청 Head

{
  authorization: 'basic n09qnv28jqde829que892q9eu2q8jed892'
}
  • 응답 Body

상태코드 : 200

{
  "ordersId": "6220d89ea6e069ba6fcfe39c"
}

상태코드 : 404

{
  "Error": "Not Found"
}
profile
DevOps !

0개의 댓글