조건에 따라 SQL문을 다르게 만들기

Songss·2024년 12월 28일

개발스킬

목록 보기
2/9
const getCartItems = (req, res) => {
  const { selected } = req.body;

  let authorization = ensureAuthorization(req, res);

  if (authorization instanceof jwt.TokenExpiredError) {
    return res.status(StatusCodes.UNAUTHORIZED).json({
      message: '로그인 세션이 만료되었습니다. 다시 로그인 하세요.',
    });
  } else if (authorization instanceof jwt.JsonWebTokenError) {
    return res.status(StatusCodes.BAD_REQUEST).json({
      message: '잘못된 토큰입니다.',
    });
  } else {
    // '전체 장바구니 보기'
    let sql = `SELECT c.id, c.book_id, b.title, b.summary, c.quantity, b.price
    FROM cartItems c JOIN books b 
    ON c.book_id = b.id WHERE c.user_id = ?`;

    let values = [authorization.id];

    if (selected) {
      // 주문서 작성 시 '선택한 장바구니 목록 조회'
      sql += ` AND c.id IN (?) `;
      values.push(selected); // values = [authorization.id, ...selected] 이 문법은 배열 구조가 옳지 못함
    }

    conn.query(sql, values, (err, results) => {
      if (err) {
        console.error(err);
        return res.status(StatusCodes.BAD_GATEWAY).json({ error: '데이터베이스 오류입니다.' });
      }

      return res.status(StatusCodes.OK).json(results);
    });
  }
};

전체 장바구니 보기선택한 장바구니 목록 조회를 조건에 따라 처리할 수 있도록 만들었다.
req.body에 값이 있다면
if(selected)구문이 실행되면서 AND c.id IN (?) 의 SQL구문이 추가되어 실행됨

0개의 댓글