Wecode - Project 3 (부트캠프)/Project 3 과정

Project 3: [장바구니에 여러 products 담길 때], 주문/결제 api orderService.js

Queen Julia 2023. 10. 24. 01:10

여태 만든 건 장바구니에 하나의 Product이 담긴다는 전제 하에, 

product id 로 req.body에 받고 

데이터베이스에 넣었는데, 

 

이제는 

장바구니에 여러 products 를 넘어서 

넘기는 거를 해야 한다. 

 


이후 아래와 같이 수정됨. 여러 제품을 한번에 담는 거로. products에 배열로 담는데, 프론트에게 받는 값은 productId로 생각하면 됨

 

 

{   
    "userId": 2, 
    "totalPrice": 3000 , 
    "shippingMethod" : "방문수령",
    "paymentId": 1,
    "products": [
        {"productId": 1,
        "quantity" : 1},
        {"productId": 2,
        "quantity" : 1}
    ]
}


과정 

 

 router는 변함이 없고,

orderDao도 데이터베이스에서 productId 그대로 가져오기에 변함이 없다. 

 

controller 와 orderService만 변경 및 추가된다

 

orderController는 req,res를 다루는 곳이니, body에 적힌 products를 받아야 한다

 

그러면 service에서는 products 배열 안에 있는 각 키와 값을 건드린다.

for 문 안에 products Id , quantity 쓰는 건 다 넣어야 한다

에러 핸들링까지도. 

 

  • product id 다른 경우 에러 핸들링 
  • 장바구니 수량보다 많은 제품 수량 구매 에러핸들링
  • 장바구니 수량 구매 코드, 결제 후 장바구니 수량 변경/삭제 
  • orderDetails테이블에 정보 저장하는 코드


orderService.js 자세히 보면

 

참고

for 문 -> 프론트에서 받아오는 products 배열에 담긴 숫자만큼 

1

  • product id 다른 경우 에러 핸들링 
  • 장바구니 수량보다 많은 제품 수량 구매 에러핸들링
  • 장바구니 수량 구매 코드, 결제 후 장바구니 수량 변경/삭제 
  • orderDetails테이블에 정보 저장하는 코드 

2

for 문에 await를 담게 되면, 계속 

await 바로 위에 async가 있어야 한다는 에러가 난다. 

 

for 문 있기 전까지는 상관 없던 에러. 

 

그렇기에, promiseall을 위와 같이 활용해야 한다.