API만들기 - 삭제API

YU NA Joe·2022년 8월 3일
post-thumbnail
# indexRoute.js
app.delete("/persons/:Person_ID", index.DeletePerson);
# indexController.js
## 컨트롤러에 DeletePerson함수 만들기 

exports.DeletePerson = async function (req, res){
    // indexRoute.js에서 "/persons/:Person_ID", 전달되 pass vars 뽑아내기
    const {Person_ID} = req.params;
    try {
      const connection = await pool.getConnection(async (conn) => conn);
        try{
          const IsValidPersonId = await indexDao.IsValidPersonId(connection,Person_ID);
          if(!IsValidPersonId){
            return res.send({
                isSuccess: false, 
                code: 410, 
                message: "유효한 인덱스가 아님당",
            }); 
          }
          const [rows] = await indexDao.DeletePerson(connection, Person_ID)
          return res.send({
                result: rows, 
                isSuccess: true,
                code: 200, 
                message: "사람 삭제 성공"
            });  
        }catch(err){
            logger.error(`Delete Query error\n: ${JSON.stringify(err)}`);
            return false;
        } finally {
            connection.release(); 
        }

    } catch (err) {
      logger.error(`deleteStatement DB Connection error\n: ${JSON.stringify(err)}`);
# indexDao.js
## 삭제 대상의 row는 status 컬럼에  D로 업데이트 해주기 & default값 설정 
==> alter table person alter column status set default 'E';
## alter table person add status varchar(45);로 먼저 mysql 컬럼 추가 


exports.DeletePerson = async function (connection, Person_ID){
    const Query = `update person set status = "D" where Person_ID = ?;`;
    const Params = [Person_ID];  
    const rows = await connection.query(Query, Params);
    return rows;             
};  
      return false;
    } 
}

Mysql에 확인해보기

한번더 같은 데이터를 삭제 해보자
삭제한 데이터인데 또 삭제 성공이라고 나온다

=====================================================================
fix하기 위해서 나 혼자 생각해본거?!
==> DeletePerson Query에 status = "E" 조건 주기?!

exports.DeletePerson = async function (connection, Person_ID){
    const Query = `update person set status = "D" where Person_ID = ? and status = "E";`;
    const Params = [Person_ID];  
    const rows = await connection.query(Query, Params);
    return rows;             
}; 

It doesn't work!
왜냐하면 controller에서 logic이 유효한 Person_ID 를 먼저 check하는데 IDX에
걸리지 않기 떄문에
그냥 데이터값들을 return해준다. 따라서I Person_ID에서 오류가 나게 해야 한다.

  try{
          const IsValidPersonId = await indexDao.IsValidPersonId(connection,Person_ID);
          if(!IsValidPersonId){
            return res.send({
                isSuccess: false, 
                code: 410, 
                message: "유효한 인덱스가 아님당",
            }); 
          }
          const [rows] = await indexDao.DeletePerson(connection, Person_ID)
          return res.send({
                result: rows, 
                isSuccess: true,
                code: 200, 
                message: "사람 삭제 성공"
       });  

따라서

# IndexDao.js

exports.IsValidPersonId = async function (connection,Person_ID) {
    const Query = `SELECT * FROM person WHERE Person_ID =? and status = "E";`;
    const Params = [Person_ID]; 
    const [rows] = await connection.query(Query, Params); 
    // 왜냐하면은 db에 없는 id를 넣었을 경우는 빈 것이 return되기때문
    if(rows < 1){
        return false; 
        } 
    return true;
};  

성공!

0개의 댓글