개인공부 기록/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)
}
}