statesairline-server Advanced

dice0314·2023년 6월 5일
0

더미데이터 예시

module.exports = [
  {
    uuid: 'af6fa55c-da65-47dd-af23-578fdba40bed',
    departure: 'ICN',
    destination: 'CJU',
    departure_times: '2021-12-02T12:00:00',
    arrival_times: '2021-12-03T12:00:00'
  }, ...

문제

const flights = require('../repository/flightList');
const fs = require('fs');

module.exports = {
// Advanced
  // [PUT] /flight/:uuid 요청을 수행합니다.
  // 요청 된 uuid 값과 동일한 uuid 값을 가진 항공편 데이터를 요쳥 된 Body 데이터로 수정합니다.
  update: (req, res) => {
    const { uuid } = req.params;
    const bodyData = req.body;
     // TODO:
  }
};

처음 시도한 방법

  • map()을 이용하여 작성
update: (req, res) => {
    const { uuid } = req.params;
    const bodyData = req.body;
    let resultObj = {};
    flights.map((el) => {
        if (el.uuid === uuid) {
            resultObj = {...el, ...req.body };
        } else {
            return {...el};
        }
    });
}

위 코드의 문제점

기존 더미 데이터 자체를 업데이트 해야되는데
map()을 이용하여 작성한 위의 코드는
업데이트 된 데이터와 기존의 더미데이터를 합쳐서
새로운 데이터를 생성하게 된다.
즉 데이터를 여러번 바꾼다고 요청할 경우
처음에 업데이트한 결과가 더미데이터에 적용되지 않아서
업데이트가 되지 않는것 같다.

즉, 수정이 두번 이상 발생한다면 첫번째 요청과
두번째 요청 모두 적용되야 한다

테스트에서 원하는 결과
기존 데이터 : {a: 1, b: 2, c: 3, d: 4}, 요청 {b: 8}
첫 요청 실행 : {a: 1, b: 8, c: 3, d: 4}, 요청 {c: 8}
모든 요청 결과 : {a: 1, b: 8, c: 8, d: 4}

아래코드의 결과
기존 데이터 : {a: 1, b: 2, c: 3, d: 4}, 요청 {b: 8}
첫 요청 실행 : {a: 1, b: 8, c: 3, d: 4}, 요청 {c: 8}
모든 요청 결과 : {a: 1, b: 2, c: 8, d: 4}

통과된 코드

const flights = require('../repository/flightList');
const fs = require('fs');

module.exports = {
  // Advanced
  // [PUT] /flight/:uuid 요청을 수행합니다.
  // 요청 된 uuid 값과 동일한 uuid 값을 가진 항공편 데이터를 요청 된 Body 데이터로 수정합니다.
  update: (req, res) => {
    const { uuid } = req.params;
    const bodyData = req.body;
    // 더미데이터에 있는 uuid와 요청받은 uuid의 값이 같은 데이터만 더미데이터에서 반환한다.
    const flight = flights.filter((data) => data.uuid === uuid)[0];

  	// 만약 uuid가 일치하는 데이터가 없다면
    if (!flight) {
      // 클라이언트에 400오류와 응답을 전송한다.
      res.status(400).json("해당 데이터가 없습니다.");
      return;
    }

  	// 위에서 필터로 뽑아낸 flight의 인덱스 번호를 변수에 할당한다.
    const idxOfFlight = flights.indexOf(flight);

  	// 필터로 뽑아낸 flight객체에 요청받은 수정데이터를 덮어 씌워서 변수에 할당한다.
    const newFlight = { ...flight, ...req.body };

  	// 기존 더미데이터의 인덴스 idxOfFlight번호에 존재하는 객체를 newFlight객체로 바꾼다.
    flights.splice(idxOfFlight, 1, newFlight);

  	// 바뀐 데이터를 응답해 준다.
    return res.json(newFlight);

  }
};
profile
정리노트

0개의 댓글