Sprint 복기

jeongjwon·2023년 4월 6일
0

SEB FE

목록 보기
34/56

Sprint 복기

app.js

const express = require('express');
const cors = require('cors');
const app = express();

// 모든 서버는 요청을 받을수 있는 포트 번호를 필요로 합니다.

// HTTP server의 표준 포트는 보통 80 번 이지만, 보통 다른 서버에서 사용중이기 때문에 접근할 수 없습니다.
// 따라서 우리는 보통 테스트 서버 포트로 3000, 8080, 1337 등을 활용합니다.

// PORT는 아파트의 호수와도 같습니다. 서버로 요청을 받기 위해서는 다음과 같이 포트 번호를 설정 합니다.
// (* 때에 따라 다른 포트번호를 열고 싶다면, 환경 변수를 활용 하기도 합니다.)
const port = 3001;

const flightRouter = require('./router/flightRouter');
const bookRouter = require('./router/bookRouter');
const airportRouter = require('./router/airportRouter');

app.use(cors());
app.use(express.json());

app.use('/flight', flightRouter);
app.use('/book', bookRouter);
app.use('/airport', airportRouter);
//각 라우터에 맞게 컨트롤러로 함수 구현

app.get('/', (req, res) => {
  res.status(200).send('Welcome, States Airline!');
});

app.use((req, res, next) => {
  res.status(404).send('Not Found!');
});

app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send({
    message: 'Internal Server Error',
    stacktrace: err.toString()
  });
});

app.listen(port, () => {
  console.log(`[RUN] StatesAirline Server... | http://localhost:${port}`);
});

module.exports = app;

flightRouter.js -> flightController.js

//flightRouter.js
const router = express.Router();

router.get('/', findAll);
router.get('/:uuid', findById);
router.put('/:uuid', update);

module.exports = router;
//flightController.js
const flights = require('../repository/flightList');
const fs = require('fs');

module.exports = {
  // [GET] /flight
  // 요청 된 파라미터 departure_times, arrival_times 값과 동일한 값을 가진 항공편 데이터를 조회합니다.
  // 요청 된 파라미터 departure, destination 값과 동일한 값을 가진 항공편 데이터를 조회합니다.
  findAll: (req, res) => {
    const { departure_times, arrival_times, destination, departure } = req.query;
    // TODO:
    // /flight?departure=CJU&destination=ICN => req.query = {departure : 'CJU' , destination: 'ICN'}
    // console.log(req.query);

    let result = flights;

    if(departure_times){
      result = result.filter((flight) => flight.departure_times === departure_times );
    }
    if(arrival_times){
      result = result.filter((flight) => flight.arrival_times === arrival_times );
    }
    if(destination){
      result = result.filter((flight) => flight.destination === destination );
    }
    if(departure){
      result = result.filter((flight) => flight.departure === departure );
    }
    
    return res.status(200).json(result);

  },
  // [GET] /flight/:uuid
  // 요청 된 uuid 값과 동일한 uuid 값을 가진 항공편 데이터를 조회합니다.
  findById: (req, res) => {
    const { uuid } = req.params;
    // TODO:
    // { uuid  :  ' ' }
    // console.log(req.params);

    return res.json(flights.filter(flight => flight.uuid === uuid));
  
  },

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

     let result = flights.filter(flight => flight.uuid === uuid);
     
    if(bodyData){
      for(let key in bodyData){
        result[0][key] = bodyData[key];
       }
    }
     return res.status(200).json(result[0]);
  }
};

findAll : 요청된 파라미터에 의한 항공편 데이터(flights) 조회(get) + req.query 이용
findById : 요청된 uuid 값과 동일한 uuid 값을 가진 항공편 데이터 조회 + req.params 이용

filter 메서드로 flights 의 key값들인 departure_times, arrival_times, destination, departure or uuid 로 요청으로 들어온 req.query 나 req.params 과 일치하는 비교하여 상태코드 200과 함께 응답한다.

update : 요청 된 uuid 값과 동일한 uuid 값을 가진 항공편 데이터를 요쳥 된 Body 데이터로 수정(PUT)

먼저 filter 메서드로 uuid가 일치하는 항공편 데이터를 뽑는다. = result(배열의 형태)
req.body로 들어온 데이터의 키들이 result의 키들과 일치할 때 값을 변경시킨 result[0](객체의 형태)와 함께 상태코드 200과 함께 응답한다.

req.query vs req.params

http://www.test.com/2?departure=ICN&destination=CJU

만약 사용자가 다음과 같은 url로 웹 서버에 get요청을 보냈다면 다음과 같이 사용할 수 있다.

app.get('/:id', (req, res) => {
	console.log('req.params : ', req.params);
  	/* output ==>> req.params : { id : '2'}*/
  	
  	console.log('req.query : ', req.query);
  	/* output ==>> req.query : { departure: 'ICN', destination: 'CJU'}*/
})

bookRouter.js -> bookController.js

// bookRouter.js
const router = express.Router();

router.get('/', findAll);
router.get('/:phone', findByPhone);
router.get('/:phone/:flight_uuid', findByPhoneAndFlightId);
router.post('/', create);
// bookController.js
// 항공편 예약 데이터를 저장합니다.
let booking = [];

module.exports = {
  // [GET] /book 요청을 수행합니다.
  // 전체 예약 데이터를 조회합니다.
  findAll: (req, res) => {
    return res.status(200).json(booking);
  },
  // [GET] /book/:phone 요청을 수행합니다.
  // 요청 된 phone과 동일한 phone 예약 데이터를 조회합니다.
  findByPhone: (req, res) => {
    const {phone} = req.params;
    
    let result = booking;
    if(phone){
      result = result.filter((booking => booking.phone === phone));
    }
    return res.status(200).json(result);
  },
  // [GET] /book/:phone/:flight_uuid 요청을 수행합니다.
  // 요청 된 id, phone과 동일한 uuid, phone 예약 데이터를 조회합니다.
  findByPhoneAndFlightId: (req,res) => {
    const {phone, flight_uuid} = req.params;
    
    // TODO:
    let result = booking;
    if(phone){
      result = result.filter((booking => booking.phone === phone));
    }
    if(flight_uuid){
      result = result.filter((booking => booking.flight_uuid === flight_uuid));
    }
    return res.status(200).json(result);

  },
  // [POST] /book 요청을 수행합니다.
  // 요청 된 예약 데이터를 저장합니다.
  create: (req, res) => {
    // POST /book에서 사용할 booking_uuid입니다.
    const booking_uuid = uuid();
    // TODO:
    
    booking.push(req.body);
    return res.status(201).json({});

  }
  deleteByBookingId: (req, res) => {
    const {booking_uuid} = req.params;
    // TODO:
    let result = flight;
    if(booking_uuid){
      result = result.filter((flight) => flight.uuid !== booking_uuid);
    }
    return res.status(201).json(result);
  }
}

예약된 데이터가 저장된 배열 booking

findAll : booking 응답

findByPhone : booking 에서 booking.phone 과 req.parmas 의 phone 이 일치하는 것을 filter 메서드로 뽑아 응답

findByPhoneAndFlightId : booking 에서 phone, flight_uuid 과 req.parmas 의 phone, flight_uuid 가 일치하는 것을 filter 메서드로 뽑아 응답

create : 요청된 예약 데이터(req.body)를 저장(POST)
POST 메서드는 저장할 데이터(req.body)와 함께 요청되기 때문에
예약 데이터 배열인 booking 에 데이터를 추가시켜 상태코드 201과 함께 응답한다.

delete: 요청된 Id, phone 값과 동일한 예약 데이터 삭제(delete)
곧 동일하지 않은 예약 데이터만 추출하여 상태코드 201과 함께 응답한다.


0개의 댓글