서버 구현에 익숙하지 않아 헤메었지만 미숙하게나마 완성한것 같다.

<구현해야 할 목록>
항상 같은 프로세스이지만 과제를 접했을때 혼란스러움을 최대한 줄이기 위해서는 어떤 파일들이 어떤곳에 영향을 주고 있는지, 구조가 어떻게 되어 있는지를 빠르게 파악하는것이 중요한 것 같다.
statesairline
statesairline/app.js 는 서비스에 필요한 미들웨어와 웹 서버를 실행하는 코드가 작성되어 있습니다.
router
statesairline/router/ 안에는 airport API, book API, flight API 요청을 수행하는 라우터가 작성되어 있습니다. 작성된 라우터 내용을 통해 API 요청을 받을 수 있습니다.
controller
statesairline/controller/ 안에는 정의된 API 요청을 수행하는 코드를 작성해야 합니다. ( airportController.js 에 작성된 내용을 참고하여 작성합니다. )
repository
statesairline/repository/flightlist.js 는 서비스에서 제공하는 항공편 데이터가 작성되어 있습니다. 이 데이터로 서비스를 구현합니다.
statesairline/repository/airportlist.js 는 서비스에서 제공하는 공항 데이터가 작성되어 있습니다.
5.test
statesairline/test/statesairline.test.js 은 Jest 스펙을 가지고 있으며 코드 테스트를 위한 테스트 케이스가 작성되어 있습니다.
GET 요청에 query에는 클라이언트가 입력한 데이터가 들어오는데 이 데이터를 활용하여 flight에서 동일한 값을 가진 데이터를 filter를 이용하여 리턴해주는 작업이 필요했다.
uuid값도 마찬가지의 작업을 하였다.
update부분이 좀 헷갈리고 어려웠는데 이부분은 이해가 더 필요할 것 같다.
update: (req, res) => {
const { uuid } = req.params;
const bodyData = req.body;
// TODO:
let list = flights;
const index = flights.findIndex((obj) => obj.uuid == uuid);
list[index] = {
uuid: uuid,
departure: bodyData.departure
? bodyData.departure
: list[index].departure,
destination: bodyData.destination
? bodyData.destination
: list[index].destination,
departure_times: bodyData.departure_times
? bodyData.departure_times
: list[index].departure_times,
arrival_times: bodyData.arrival_times
? bodyData.arrival_times
: list[index].arrival_times,
};
fs.writeFileSync(
"statesairline/repository/flightList.js",
"module.exports = " + JSON.stringify(list)
);
return res.status(200).json(list[index]);
},
};
<내가 작성한 코드>
update: (req, res) => {
const { uuid } = req.params;
const bodyData = req.body;
// TODO:
let findIndex; //flights 배열의 요소들 중 uuid가 같은 요소의 인덱스를 담을 변수
for (i = 0; i < flights.length; i++) {
if (flights[i].uuid === uuid) {
findIndex = i;
}
}
flights[findIndex] = { ...flights[findIndex], ...bodyData };
//flights[findIndex]의 요소였던 객체를 스프레드 연산자를 이용해 풀어서 새로운 객체 안에 넣고,
// bodyData로 받아온 객체도 풀어서 새로운 객체 안에 넣음
//뒤에 들어온 객체에 동일한 key가 있을 때 뒤에 들어온 값을 따르게 됨
return res.status(200).json(flights[findIndex]);
},
<스프레드를 이용한 코드>
이부분 또한 booking에 있는 데이터중 동일한 값을 가진 데이터를 filter로 리턴해주면 된다.
구조분해 할당을 더 이해하여 코드를 깔끔하게 다시 작성할 수 있어야할 것 같다.
create 함수 부분의 body부분으로 좀 애를 먹었는데, 요청 객체인 req.body때문이었다. req.body는 POST 방식으로 넘어오는 파라미터를 담고 있다고 한다.
// const {flight_uuid, name, phone} = req.body
// 구조분해할당을 통해 키 값들을 변수처럼 사용할 수 있다
// const newBook = {
// booking_uuid,
// flight_uuid,
// name,
// phone
// }
// booking.push(newBook);
// res.status(201).json(newBook)},
deleteByBookingId
deleteByBookingId: (req, res) => {
const {booking_uuid} = req.params;
booking = booking.filter(book => book.booking_uuid !== booking_uuid);
return res.status(200).json({booking_uuid});
요청된 id, phone 값과 동일한 예약 데이터를 삭제해주어야 한다.
filter를 통해 같지 않은 값을 담아주면 동일한 예약 데이터를 제외한 나머지가 리턴되기 때문에 해결.