statesairline-server

돌리의 하루·2023년 2월 8일
2

오늘은 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를 변수로 지정해놓으니,
한결 간편하다는 느낌을 받았다.

profile
진화중인 돌리입니다 :>

1개의 댓글

comment-user-thumbnail
2023년 2월 9일

오늘은 왜 사진이없죠?

답글 달기