오늘은 statesairline 서버 코드를 복기해보려고 한다.
만들면서 배운 점도 많고 중요한 부분을 구조적으로 파헤쳐보려고 한다.
//flightList.js
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'
},...]
flightList.js에는 이런식으로 배열안의 객체들이 모여있다.
이 flight들을 flightController.js로 변수설정 후 불러온다.
const flights = require('../repository/flightList');
//flight.controller 함수 find~앞에 module.exports가 생략
findAll: (req, res) => {//GET
const { departure_times, arrival_times, destination, departure } = req.query;
//요청된 파라미터 값들과 동일한 값을 가진 데이터를 flightList와 비교하여 조회해야 하기 때문에, req.query값으로 변수를 설정해준다.
if(req.query){ //req.query값이 들어가면
if(departure&&destination){
let filter = flights.filter(el => el.departure === departure && el.destination === destination)
return res.json(filter)
}//flights를 filter조건으로 query값과 같은 값을 가져온 후 res.json(filter)로 보내준다.
if(departure_times&&arrival_times){
let filter = flights.filter(el => el.departure_times === departure_times && el.arrival_times === arrival_times)
return res.json(filter)
}
}
return res.json(flights); //조건에 맞지 않을 경우 항공편을 보여준다.
},
// [GET] /flight/:uuid
// 요청 된 uuid 값과 동일한 uuid 값을 가진 항공편 데이터를 조회
findById: (req, res) => {
const { uuid } = req.params; //req.params를 변수로 설정
if(uuid){ //req.params가 들어온다면
let filter = flights.filter(el => el.uuid === uuid)
//params로 들어온 값이 flightList의 uuid와 동일한지 조건설정
return res.json(filter)
//동일하다면 반환
}
}
// [PUT] /flight/:uuid 요청을 수행합니다.
// 요청 된 uuid 값과 동일한 uuid 값을 가진 항공편 데이터를 요쳥 된 Body 데이터로 수정합니다.
update: (req, res) => {
const { uuid } = req.params;
const bodyData = req.body;
console.log(bodyData)
console.log(uuid)
let filter = flights.filter((x)=>x.uuid === uuid) //동일한 값을 가진 항공편 데이터
if(bodyData.arrival_times){
filter[0].arrival_times = bodyData.arrival_times
}
return res.json(filter[0])
}
bookController.js에서는 예약 데이터를 조회하고 삭제한다.
//bookController.js
let booking = [];
// [GET] /book 요청을 수행
module.exports = {
findAll: (req, res) => {
return res.status(200).json(booking);// 전체 예약 데이터를 조회
},
// [GET] /book/:phone 요청을 수행
findByPhone: (req, res) => {
const {phone} = req.params;
if(phone){
let filter = booking.filter(el=> el.phone === phone)
return res.json(filter)
}// 요청 된 phone과 동일한 phone 예약 데이터를 조회
},
// [GET] /book/:phone/:flight_uuid 요청을 수행
findByPhoneAndFlightId: (req,res) => {
const {phone, flight_uuid} = req.params;
if(phone){
let filter = booking.filter(x => x.phone === phone)
return res.json(filter)
}
if(flight_uuid){
let filter = booking.filter(x => x.flight_uuid === flight_uuid)
return res.json(filter)
}// 요청된 id, phone과 동일한 uuid, phone 예약 데이터를 조회
},
// [POST] /book 요청을 수행
create: (req, res) => {
// POST /book에서 사용할 booking_uuid입니다.
const booking_uuid = uuid();
booking.push(req.body)
return res.status(201).json(booking_uuid)// 요청 된 예약 데이터를 저장
},
// [DELETE] /book/:booking_uuid 요청을 수행
deleteByBookingId: (req, res) => {
const {booking_uuid} = req.params;
if(booking_uuid){
booking = booking.filter((x)=>x.id !== booking_uuid)
return res.status(200).json(booking)
}
}// 요청 된 id, phone 값과 동일한 예약 데이터를 삭제
}
req.query와 req.params, req.body를 변수로 지정해놓으니,
한결 간편하다는 느낌을 받았다.
오늘은 왜 사진이없죠?