접근 방식:
주문/결제 후 장바구니에서 수량/변경 및 삭제 한 것과 같은 로직
user 포인트 - product price 로 update 쿼리문
userId로 points 뽑아와서, select하고, update 퀴리문 나오는 순서.
controller와 router는 변함이 없고, orderDao, orderService만 변경 및 추가된다
orderService.js
2) 결제 추가
orderService.js 자세히 보면
첫번째 코드는, orderDao에서 가져온
userId가 겹치는 것에 해당하는 Points를 가져온 isUserPoints 에 제품 가격을 뺀다.
그 남은 포인트 (remainPoints)를 orderDao로 보낸다.
그러면 orderDao에서는 orderService에서 updatePoints를 받아와서,
users 테이블의 points칼럼을 service에서 가져온 updatePoints로 update한다 (
async ( ) 안에 변수나 함수 모두를 사용할 수
그래서 remainPoints안해도 되나봄
orderDao.js
DB에서 가져오는 dao니까
포인트를 가져오고 (select)
포인트를 수정하는 쿼리문 (update; 삭제는 안 하기로, 장바구니는 삭제가 되어야 하는데 포인트는 그럴 필요가 없어서)
그런데, return userPoints가 아니라,
return pointsFromUser[0].points인 이유
데이터베이스에서 await로 가져와서,
points를 select한거는 pointsFromUser 이고
return할때는 pointsFromUser의 객체의 (당연히 userId 일치하는건 1개니까) 그 첫번째 배열의 points 키에 해당하는 값을 보낸다 라는 뜻
userPoints 함수는 userId를 매개변수로 받아오는 거,
+ dao 구조를 보면,
const userPoints 함수 안에, const pointsFromUser라는 변수 선언을 해주는데,
이것은 return할 때 필요해서,
나머지, update, insert into 쿼리문에서는
await 앞에 굳이 const로 함수명 정의해주지 않아도 됨.
return할 때 필요한 건데, return 안하니
'Wecode - Project 3 (부트캠프) > Project 3 과정' 카테고리의 다른 글
Project 3 -[주문 api] unit test; test code 성공 (에러 핸들링 없이) (0) | 2023.10.22 |
---|---|
토큰 담아 req.body 보내기 (0) | 2023.10.22 |
Project 3: unit test, test code [개념] + 프로세스 (0) | 2023.10.20 |
Project 3- 주문 api : postman 통신 성공 (if 에러 핸들링 x, transactionx) (0) | 2023.10.20 |
Project 3: [주문 api] - if 에러 핸들링, transaction (0) | 2023.10.20 |