Project 3 - [결제 api] 완성 - 포인트 차감
접근 방식:
주문/결제 후 장바구니에서 수량/변경 및 삭제 한 것과 같은 로직
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 안하니