2024.12.18 - [웹 개발 공부하기] - [12.18] 결제(주문)하기 API 구현해보기🤔2024.12.19 - [웹 개발 공부하기] - [12.19] 논 블로킹 I/O 때문에 순서가 바뀐다고?🤔2024.12.19 - [웹 개발 공부하기] - [12.19] async&await으로 순서를 조종해보자📢2024.12.20 - [웹 개발 공부하기] - [12.20] 결제(주문)하기 API 진짜 끝 진짜 진짜 끝!!🤣 드디어 결제(주문)하기 API가 끝났으니, 주문 목록(내역) 조회 API와 주문 상세 조회 API 를 해보려한다.일단 Method가 GET 인 만큼 엄청 어려운 편은 아니라 금방 끝날 것 같다.조회인 만큼 sql은 SELECT가 될 거고, orders 테이블과 delivery 테이블..
2024.12.18 - [웹 개발 공부하기] - [12.18] 결제(주문)하기 API 구현해보기🤔2024.12.19 - [웹 개발 공부하기] - [12.19] 논 블로킹 I/O 때문에 순서가 바뀐다고?🤔2024.12.19 - [웹 개발 공부하기] - [12.19] async&await으로 순서를 조종해보자📢 이제 코드를 전체 다 주석을 풀고 async&await을 사용한 만큼 사용법에 맞게 코드를 어느정도 수정한 후,테스트를 해보기 위해 돌려봤다!Could not get response 가 떴다.역시 한 번에 잘 되리란 법은 없군.. 하고 콘솔창을 좀 보러갔다.뭐시기저시기.. undefined 다. 라는 것 같은데...[results] = await conn.query(sql, [values]); ..
2024.12.19 - [웹 개발 공부하기] - [12.19] 논 블로킹 I/O 때문에 순서가 바뀐다고?🤔 node.js의 특징 때문에 순서가 바뀔 수도 있다는 것을 알게되었다.그래서 undefined가 나왔군.. 잡았다 요놈! 그럼 지금까지 쓴 conn.query를 promise 객체로 감싸주면 되겠군... 이라고 생각했지만구글링을 해보니 생각보다 promise 객체를 사람들이 안...쓴다?엥? 그럼 async&await을 어떻게 쓰는거지? ;; 싶었다. 사실 mysql에서는 쿼리를 promise 객체로 제공을 할 수 있었다.promise 객체로 따로 안 감싸도 모든 쿼리가 promise 객체로 감쌀 수 있는 방법이 있다.그건... npmjs.com 에서 아주 잘 알려주고 있다😀 많은 방법 중 내가..
2024.12.18 - [웹 개발 공부하기] - [12.18] 결제(주문)하기 API 구현해보기🤔 어제 했던 결제(주문)API 에서 문제가 발생했다!테스트하면서 이전에 테스트한 conn.query는 주석으로 바꿔놓고 테스트를 했었다.그래서 주석을 다 풀고 한 번 포스트맨을 돌려봤더니...400 Bad Request가 떴다...그리고 워크벤치를 확인해봤더니.. delivery 테이블의 데이터만 잘 들어간 걸 확인할 수 있었다.let delivery_id;let order_id;let sql = `INSERT INTO delivery (address, receiver, contact) VALUES (?, ?, ?)`;let values = [delivery.address, delivery.receiver,..
최종적으로 diagrma이 완성됐다!이렇게보니 정말.. 사용해야할 데이터가 많아 보인다 🙄처음에 API 설계할 때와는 좀 다른 듯 하다.. 역시 하면서 점점 바뀐다는 게 사실이었다 😥 이번엔 결제(주문)하기 API 구현할 예정이다!사용할 테이블은 orders / orderedBook / delivery 테이블이다.Foreign key도 diagram 처럼 워크벤치로 미리 작업을 해놓은 상태다.결제 API 설계는 이렇게 했었다.REQ에서 items(상품목록)의 데이터들은 orderedBook 테이블에 insert를 할 것이고,delivery(배송정보) 데이터들은 delivery 테이블에 insert를 할 예정이다.totalQuantity, totalPrice, user_id, firstBookTitle..
우선, 장바구니 API를 구현하면서 문제가 있었다.워크벤치에서 cartItems(장바구니) 테이블을 만들면서 Foreign Key 설정 중 문제였다.Foreign Key Name과 Index Name이 중복이 되어서 그런 거였다..그래서 간단하게 fk 제약조건 이름을 지었다. [ fk_기준 테이블명_참조테이블명_참조키 ]ex) cartItems.user_id > users.id => fk_cartItems_users_idex) likes.user_id > users.id => fk_likes_users_id 이렇게 만들기로 규칙을 만들었다. 이전에 만든 테이블들은 지나가고, cartItems 테이블부터 사용할 것이다.cartItems 테이블을 생성했으니, 이제 본격적으로 API 구현을 해보려한다👍 ..
2024.12.16 - [웹 개발 공부하기] - [12.16] 좋아요 API 구현해보기😍 자, 이제 좋아요 기능을 구현해봤으니 좋아요 수를 나타내고 좋아요 여부도 나타내보고자 한다. 💥 좋아요 수 구하기liked_book_id 가 1인 데이터를 보여줘. 라는 뜻이다.그럼 총 3개의 행이 나오는 걸 볼 수 있는데, 이 갯수만 보고싶을 땐 어떡해야할까?바로, count라는 함수를 붙여주면된다. 조건에 만족하는 행의 갯수를 알아서 계산해주는 걸 볼 수 있다. 굿👍 그럼 좋아요 갯수를 세고 books 테이블에 컬럼 추가해서 출력을 해보겠다!SELECT *, (SELECT count(*) FROM likes WHERE liked_book_id=books.id) AS likes FROM books; * 뒤에..
다이어그램에서 likes 테이블을 생성해, user_id와 liked_book_id의 Foreign Key 설정을 해준다.1명의 유저가 다양하게 좋아요 를 누를 수 있기 때문에 1:N 의 관계를 가질 것이다.그럼 이제, 워크벤치에서도 똑같이 테이블을 생성한 뒤, Foreign Key 설정을 해주겠다.워크벤치에서 likes 테이블을 생성한 뒤, user_id와 liked_book_id에 Foreign Key를 설정해준다. 다른 API와 동일하게 LikeController.js 를 만든 후, 그 안에 로직을 짜려고 한다.likes.js에는 말 그대로 router가 경로만 알려주게끔 만들었다. 💥 좋아요 추가 API 구현const addLike = (req,res) => { const {id} = re..
우선, 카테고리를 나타내는 페이지가 있는 만큼 카테고리 이름이 잘 뽑아지도록 JOIN을 해줘야한다.category 테이블과 books 테이블을 조인해서, category_id에 맞는 category_name이 뽑아지도록 해주었다.( category 테이블의 name => category_name 으로 변경 )foreign Key 설정하기JOIN 해주기diagram 수정category 테이블의 id 1개 당 books 테이블의 category_id는 다수가 존재하므로 다대일 로 설정해주었다. let sql = 'SELECT * FROM books LEFT JOIN category ON books.category_id = category.id WHERE books.id=?;';개별 도서 조회에서 카테고리를 ..
우선, 도서 API를 구현해보기 전에 바꿔야할 것이 있다.API 설계 당시 books의 컬럼명에 문제가 있었다. format과 description 그리고 index 이다.해당 단어들로 컬럼으로 만들어서 사용하려하면 파란색으로 바뀐다.즉, 예약어이니 웬만하면 사용하지말지? 라는 뜻이다.그래서 format 은 form 으로, description은 detail로, index는 contents로 바꿔서 사용하였다. 이번 도서 API도 이전에 했던 회원가입 API와 동일하게 routes 폴더안에 books 라는 경로 파일을 만들어주고,controller 폴더 안에 BookController 라는 파일을 만들어 로직을 짰다. 도서 API는 총 3가지로 설계했었다.1. 전체 도서 조회2. 개별 도서 조회3. 카테..