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

Project 3 - 최종 주문/결제 api 코드 설명

코드를 왜 이렇게 썼는지, 왜 여기에 썼는지 설명할 줄 아는 것이 중요하다. 이전에는 블로그 기록하면서 코드를 작성했는데 계속 수정되기도 하고 바로바로 통신하고 확인해보고 이렇게 저렇게 해보는 도전정신이 줄어들어, 그때그때 주석으로 달아두었다. 그 정신없는 와중에 기록해두었던 주석 하나하나를 뜯어보며 routers orderRouter를 Index에서 불러온다 orderRouter.post('/', orderController.createOrders); // 토큰 X orderRouter.post('/', verifyToken, orderController.createOrders); //토큰 O orderRouter.post('/', verifyToken, asyncWrap(orderController...

Project 3- 마지막 standing meeting

상황 공유 1. 상세페이지 지도 api -> 위치 기반 서비스 -> 카카오맵 / 리뷰를 먼저 보여주고, 리랜더링 시켰을떄 지도 로딩 돼서 ui 변경 2. 외부결제 모듈 포트원 단건 결제 완료 3. 목요일 11시부터 코드 프리징을 24시간하기로 했었는데,/ 오후 11시까지 12시간 전 소스 프리징 (복수결제건 처리, 바로 결제건 처리, "리뷰/상품 관련된 사진" 축적) 4. 외부결제 후 바로구매 로직 -- 카테고리별 하고 싶은 상품 정해서, 해당하는 이미지 따 오고, 덤프 파일로 업로드 / 리뷰 축적만, 작성은 안하고, 이미지 - 카테고리 9개 각각 (한 카테고리 별 제품 15개) /이미지 넣는건 정진님 s3에 들어감 리소스 축적을 하기로. [이미지] 1. 카테고리 정하고 (총 카테고리 9개) 2. 사이트..

Project 3 - API document postman으로 작성하기 [개념]

백엔드는 해당 엔드포인트에 대한 최종 설명문인 API document를 작성 API 문서화 = 백엔드가 작성한 각각의 API 기능을 문제없이 사용하기 위해서, 개발자간 어떠한 구성 요소를 주고 받아야하는지 일목요연하게 정리하는 작업 API 기능정의서: 목적 / 의도 / 엔드포인트 / API별 필수 인자 등에 대한 세부 정보가, 개발자는 물론 일반 사용자 까지 모두 이해하기 쉬운 형식으로 구조화 직접적으로 타인과 소통해야만 하는 빈도를 확연히 줄여줄 수 있고, 그 결과 일의 능률을 높일 수, 기업 측면에서도 시간 및 비용의 효율 올릴 수 workspace를 만듦 여기 body에 적고 view documentation 로 들어가서 보면, 오른쪽에 목차 타고 들어가서 볼 수 있음 여기는 프론트에게 설명을 적는..

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

여태 만든 건 장바구니에 하나의 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도 데이..

Project 3 - [주문/결제 api] 에러 핸들링 코드 및 과정

3가지 에러 1. // 에러 핸들링: carts 에 담기지 않은 product를 주문할 때 -> productId 라서 for()안에 들어가야 함 const isProductInCarts = await orderDao.isProductInCarts(userId, productId); // await: userId, productId,(orderDetails의 ) quantity를 orderDao로 보내준다 console.log(isProductInCarts); if (productId !== isProductInCarts) { throw new Error('ordered productId is not in the carts'); } userId가 8인데 이 유저에 해당하는 게 carts 에 없다는 거 2..

Project 3 -[주문 api] unit test; test code 성공 (에러 핸들링 없이)

테스트 코드 작성 과정 아래 링크 참고하여, app.js를 app.js와 server.js로 분리하고 테스트용 dotenv파일 만들어 준다 (.env.test , .env.test.sample) Project 3: unit test, test code [실습] 0. app.js ,server.js 분리하기 1. test 폴더에 order.test로 만듦 2. test용 데이터베에스 만들기 _ connection_test create database [ ] 2. .env.test , .env.tests.sample 파일에 무조건 connection test database 데이터베이스 이름 pm-developer-justdoit.tistory.com (.env.test_.gitignore에 넣어주고) 그 ..

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에서 upd..

Project 3: unit test, test code [개념] + 프로세스

테스트 코드를 계획 및 작성하는 이유: 사전에 에러를 방지하여 더 높은 품질의 소프트웨어를 제공하기 위함 기능 추가, 버그 수정, 리팩토링을 진행하면서 개발자는 다양한 실수를 할 수 있음 개발자는 직접 의도한 대로 동작하는지 테스트하는 코드를 작성하여 사전에 미리 실수를 잡아내고 코드를 올바르게 수정 테스트를 통해 소프트웨어 개발 전반적인 부분에서 발생할 수 있는 에러를 미리 찾아낸다는 것은 테스트 환경이 실제로 서비스가 배포되는 환경과 일치해야 한다는 것 0. 프로젝트 구조 app.js ,server.js 분리하기 서버 가동에 필요한 모든 코드가 app.js에 포함된 방식이 아닌, app.js와 server.js로 분리하는 방식으로 변경 app.js const express = require("expr..

Project 3- 주문 api : postman 통신 성공 (if 에러 핸들링 x, transactionx)

이후 여러 개 제품을 담는 걸로 수정된 api 통신 문제 [수정 사항] 1. controller -> req.userId = req. body는 아래에 또 들어가 있어서 뺌 전 후 2. orderid 는 빼도 됨 > order 테이블에 저장하면 자동으로 id 생기고 > orderdetails 는 order에서 받은 userid도 필요없음 orderdetails에서 orderid 받아서 거기에 userid 있으니까 (orderdetails 테이블 키는 애초에 orderid product id, cartid만 필요) controller service.js 안그래도 postman body에 orderId 있는 거 보면서 이상하더라 body에 왜 orderid를 보내지? newOrder 함수로 자동 생기는데 ㅇ..