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

Project 3 - [결제 api] 완성 - 포인트 차감

Queen Julia 2023. 10. 20. 20:47
접근 방식:
주문/결제 후 장바구니에서 수량/변경 및 삭제 한 것과 같은 로직

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 안하니