사용자는 모든 상품을 조회할 수 있다.
사용자는 검색어로 원하는 상품을 찾을 수 있다.
사용자는 선택한 상품의 상세 페이지를 조회할 수 있다.
사용자는 각 상품의 상세 페이지에서 즉시 구매할 수 있다.
사용자는 장바구니에 원하는 상품을 넣을 수 있다.
사용자는 장바구니에서 상품의 수량을 조절할 수 있다.
사용자는 장바구니에서 원하지 않는 상품을 삭제할 수 있다.
사용자는 장바구니에서 구매를 원하는 품목만 결제할 수 있다.
사용자는 결제 단계에서 물품 가격의 합계를 확인할 수 있다.
사용자는 결제내역을 확인할 수 있다.
사용자 > 상품(상세 페이지), 장바구니 > 작업
사용자 a는 가 상품의 상세 페이지에서 결제를 한다.
사용자 b는 가 상품의 상세 페이지에서 수량을 조절을 하고 결제를 한다.
사용자 c는 가 상품의 상세 페이지에서 장바구니에 담는다.
사용자 d는 가 상품의 상세 페이지에서 수량을 조절하고 장바구니에 담는다.
사용자 f는 장바구니에 담은 상품들을 결제한다.
사용자 g는 장바구니에서 상품의 수량을 변경한다.
사용자 h는 장바구니에서 상품을 선택하고 결제한다.
사용자 i는 장바구니에서 상품을 선택하고 삭제한다.
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
}
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
}
장바구니 결제와 상품 직접결제의 구분이 필요없어 보인다.
카테고리 | Method | Endpoint | 요청 바디 |
---|---|---|---|
조회 | GET | /Carts | None |
요청 HTTP
GET http://localhost:3000/Carts
요청 Head
{
authorization: 'basic n09qnv28jqde829que892q9eu2q8jed892'
}
상태코드 : 200
[ { "userId": "6220d89ea6e069ba6fcfe39c", "product": [{ "id": "a220e2qeqqe069ba6fcfe391", "name": "GoldRing", "price": 20000, "stock": 50, "img": "https://images.unsplash.com/photo-313124283", "qty": 1 }] } ]
상태코드 : 401
{ "Error": "사용자 인증에 실패하였습니다." }
카테고리 | Method | Endpoint | 요청 바디 |
---|---|---|---|
생성 | POST | /Carts | 포함 |
요청 HTTP
POST http://localhost:3000/Carts
요청 Head
{
authorization: 'basic n09qnv28jqde829que892q9eu2q8jed892'
}
[
{
"userId": "62235el3rj90wjfjk3w03jia",
"productId": "r2qrewea6e0qwea6fcfe39c",
"qty": 1
}
]
상태코드 : 201
{ "cartId": "eq2rzd5ea6e069ba6fcfe39c"}
상태코드 : 404
{ "Error": "Not Found"}
카테고리 | Method | Endpoint | 요청 바디 |
---|---|---|---|
삭제 | DELETE | /Carts | 포함 |
요청 HTTP
DELETE http://localhost:3000/Carts
요청 Head
{
authorization: 'basic n09qnv28jqde829que892q9eu2q8jed892'
}
[
{
"cartId": "eq2rzd5ea6e069ba6fcfe39c"
}
]
상태코드 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 }
카테고리 | Method | Endpoint | 요청 바디 |
---|---|---|---|
변경 | PATCH | /Carts | 포함 |
요청 HTTP
PATCH http://localhost:3000/Carts
요청 Head
{
authorization: 'basic n09qnv28jqde829que892q9eu2q8jed892'
}
{
"cartId": "eq2rzd5ea6e069ba6fcfe39c",
"qty": 2
}
상태코드 : 200
{ "qty": 2 }
상태코드 : 404
{ "Error": "Not Found"}
카테고리 | Method | Endpoint | 요청 바디 |
---|---|---|---|
조회 | GET | /products | None |
요청 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"}
카테고리 | Method | Endpoint | 요청 바디 |
---|---|---|---|
조회 | GET | /products/:_id | None |
요청 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"}
카테고리 | Method | Endpoint | 요청 바디 |
---|---|---|---|
생성 | POST | /cartsOrders | 포함 |
요청 HTTP
POST http://localhost:3000/orders
요청 Head
{
authorization: 'basic n09qnv28jqde829que892q9eu2q8jed892'
}
{
"userId": '6220d89ea6e069ba6fcfe39c',
"carts": [{
"userId": "6220d89ea6e069ba6fcfe39c",
"productId": "622198479f7ff16f7a25cc05",
"qty": 1
},
{
"userId": "6220d89ea6e069ba6fcfe39d",
"productId": "6221998e9f7ff16f7a25cc06",
"qty": 1
},
{
"userId": "6220d89ea6e069ba6fcfe39e",
"productId": "62219a199f7ff16f7a25cc07",
"qty": 1
}]
}
상태코드 : 201
{ "orderId": "ifm930wi90fe0624a6fce21a1"}
상태코드 : 404
{ "Error": "Not Found"}
카테고리 | Method | Endpoint | 요청 바디 |
---|---|---|---|
생성 | POST | /directOrders | 포함 |
요청 HTTP
POST http://localhost:3000/orders
요청 Head
{
authorization: 'basic n09qnv28jqde829que892q9eu2q8jed892'
}
{
"userId": "6220d89ea6e069ba6fcfe39c",
"productId": "62231a1aa5173f4665a52685",
"qty": 1
}
상태코드 : 201
{ "orderId": "f3wnofhwhf93hw9ufhddjmi"}
상태코드 : 404
{ "Error": "Not Found"}
카테고리 | Method | Endpoint | 요청 바디 |
---|---|---|---|
조회 | GET | /orders | None |
요청 HTTP
GET http://localhost:3000/orders
요청 Head
{
authorization: 'basic n09qnv28jqde829que892q9eu2q8jed892'
}
상태코드 : 200
{ "ordersId": "6220d89ea6e069ba6fcfe39c" }
상태코드 : 404
{ "Error": "Not Found" }