개인공부 기록/node.js

[Node.js] 상품 찜목록 등록/삭제 구현하기

jaeha2324 2022. 9. 10. 00:05

상품을 찜목록에 등록/삭제를 하는 API를 구현해보았다.

 

Node.js Express, Layered Pattern 적용하였고 이번 포스팅에서는 Service, Dao 부분 만을 작성하였습니다.

 

먼저 상품등록의 경우 UNIQUE 값으로 중복이 될 수 없다는 전제조건을 달았다.

 

그래서 흐름을 생각해보면

 

찜 목록에 없는 경우에는 테이블에 추가하는 동작을, 있는 경우에는 테이블에서 삭제하는 동작을 하도록 구현하였다.

그래서 MYSQL 의 EXISTS 문을 사용하여 결과 값을 반환받고, if 문을 통해 결과 값에 따라 다른 쿼리문이 실행되도록 로직을 구성하였다.

 

const addProductLike = async (userId) => {
  const checkLike = await productDao.checkLike(id, userId);  // EXIST 를사용하여 존재여부를 확인한다.
  const checkResult = await Number(Object.values(checkLike[0])[0]);
  if( checkResult === eNum.notExists) { // 결과에 따라 ADD or DELETE를 동작한다.
    await productDao.addLike(id, userId);
    return eNum.Exists;
  }

checkLike 의 경우 리턴 값이 객체 형태로 나오기 때문에 리턴 값의 value만 빼오는 코드가 추가적으로 필요했다.

 

별도의 Object.freeze를 사용하여 변수들을 관리하였기 때문에 eNum.Exists = 1, eNum.notExists = 0 이라고 생각하시면 이해가 쉬울 것 같습니다.

 

checkLike 의 EXISTS 문

const checkLike = async (userId) => {
  try{
    return await database.query(
      `
      SELECT EXISTS 
      (SELECT * FROM likes l  LEFT JOIN users u on u.id = l.user_id
        WHERE u.id=${userId} 
      `
    )
  } catch(err) {
        throw new error('INVALID_DATA_INPUT', 500)
  }
}