본문 바로가기
과제기록

[페어]statesairline-server

by 뭉지야 2023. 2. 8.
728x90
//app.js부분

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

저부분 따라서 flightRouter.js파일로 가면

//flightRouter.js부분

const { findAll, findById, update } = require('../controller/flightController');

저렇게 flightRouter와 flightController는 연결이 되고

 

flightController에 가면  findAll, findById, update가 있다 

일단 이렇게 쭉 연결이 되고

 

//app.js

app.use('/flight', flightRouter);
app.use('/book', bookRouter);
app.use('/airport', airportRouter);

이부분을 통해서 쭉 연결이 되는거다.

 

이렇게 연결되기 위해서는 module이 쓰인다.

다른파일에서 써야되니까 모듈의 형태로 내보낸다는 의미이다.


flightController.js

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

module.exports = { 
findAll: (req, res) => {
    
    const { departure_times, arrival_times, destination, departure } = req.query;
     let filtered = [...flights];
    for(key in req.query){filtered = filtered.filter((e) => e[key] === req.query[key]);}
    return res.json(filtered);
    },
    findById: (req, res) => {
    const { uuid } = req.params; 
       let filtered = flights.filter((el)=> req.params.uuid === el.uuid);
    return res.json(filtered);

  },
  update: (req, res) => {
    const { uuid } = req.params;
    const bodyData = req.body;
     const idx = flights.findIndex((el)=> el.uuid === uuid);
     const newFlight = {
      ...flights[idx], ...bodyData,
     };
     flights.splice(idx, 1, newFlight); //splice(인덱스값, 몇개, 바꿀거)
     return res.json(newFlight);
  }
};
//의사코드포함
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;

    //client가 정보를 입력하면 req.query에 담기게된다. 우리는 이 req.query의 값과 flights의 값을 비교하고 필터링한 값을 제공하면 된다.

    let filtered = [...flights];
    for(key in req.query){filtered = filtered.filter((e) => e[key] === req.query[key]);}
    return res.json(filtered);
    
   /* if(departure_times && arrival_times){
      const filtered = flights.filter(
        (el)=> el.departure_times === req.query.departure_times && el.arrival_times === req.query.arrival_times
        );
        return res.json(filtered);
    }
    if(destination && departure){
      const filtered = flights.filter(
        (el)=> el.destination === req.query.destination && el.departure === req.query.departure
        );
        return res.json(filtered);
    }*/
    
   //return res.json(flights);
  },

   // let filtered = [...flights];
    //for(key in req.query){filtered = filtered.filter((e) => e[key] === req.query[key]);}
   // return res.json(filtered);

   /* if(arrival_times){
      filtered = filtered.filter((item)=> item.arrival_times === req.query.arrival_times)
    }
    
    if(destination){
      filtered = filtered.filter((item)=> item.destination === req.query.destination)
    }
    
    if(departure){
      filtered = filtered.filter((item)=> item.departure === req.query.departure)
    }
    return res.json(filtered);*/
  

    
  // [GET] /flight/:uuid
  // 요청 된 uuid 값과 동일한 uuid 값을 가진 항공편 데이터를 조회합니다.
  findById: (req, res) => {
    const { uuid } = req.params;  //params는 uuid라는 프로퍼티를 불러올수있다.req.params.uuid
    // TODO:
   /* let list = fligths;
    if(req.params){
      list = list.filter((item)=>{
        return req.params.uuid === item.uuid
      })
    }
    return res.status(200).json(list);*/
    let filtered = flights.filter((el)=> req.params.uuid === el.uuid);
    return res.json(filtered);

  },

  // Advanced
  // [PUT] /flight/:uuid 요청을 수행합니다.
  // 요청 된 uuid 값과 동일한 uuid 값을 가진 항공편 데이터를 요쳥 된 Body 데이터로 수정합니다.
  update: (req, res) => {
    const { uuid } = req.params;
    const bodyData = req.body;
     // TODO:
     /*const a = flights.find(a => a.uuid === uuid)
     for(let key in bodyData) a[key] = bodyData[key]
     res.json(a)  */
     
     /*let data = flights.filter((e)=> e.uuid === req.params.uuid) //동일한 값을 가진 것을 추출하여 data에 저장
     let list = Object.assign(data[0], req.body); //data[0]과 body를 합쳐 객체화시킨다.
     return res.json(list); */
     const idx = flights.findIndex((el)=> el.uuid === uuid);
     const newFlight = {
      ...flights[idx], ...bodyData,
     };
     flights.splice(idx, 1, newFlight); //splice(인덱스값, 몇개, 바꿀거)
     return res.json(newFlight);
  }
};

 

bookController.js

const { v4: uuid } = require('uuid'); 

let booking = [];

module.exports = {
 findAll: (req, res) => {
    return res.status(200).json(booking);
  },
  findByPhone: (req, res) => {
    const {phone} = req.params;
    let filtered = booking.filter(e => e.phone === phone)
    return res.json(filtered);
  },
    findByPhoneAndFlightId: (req,res) => {
    const {phone, flight_uuid} = req.params;
    let filtered = booking.filter(e => e.phone === phone && e.flight_uuid === flight_uuid)
   return res.json(filtered);
    create: (req, res) => {
    
    const booking_uuid = uuid();
    const data = {...req.body, booking_uuid}; 
    booking.push(data);
    return res.json(data);
    },
    deleteByBookingId: (req, res) => {
    const {booking_uuid} = req.params;
     const idx = booking.findIndex((el)=> el.booking_uuid === booking_uuid);  
    booking.splice(idx, 1); 
  }
};
//의사코드포함

// POST /book에서 사용할 uuid입니다.
const { v4: uuid } = require('uuid'); 
//uuid 네트워크상에 있는 객체들을 식별하기위해 고유한id를만들기위한 표준규약
//v4가 가장 많이 사용되는 uuid. v4는 랜덤생성

// 항공편 예약 데이터를 저장합니다.
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 filtered = booking.filter(e => e.phone === phone)
    return res.json(filtered);
  },

  // [GET] /book/:phone/:flight_uuid 요청을 수행합니다.
  // 요청 된 id, phone과 동일한 uuid, phone 예약 데이터를 조회합니다.
  findByPhoneAndFlightId: (req,res) => {
    const {phone, flight_uuid} = req.params;
    let filtered = booking.filter(e => e.phone === phone && e.flight_uuid === flight_uuid)
   return res.json(filtered);
    
    
   
    /*let list = booking
    if(req.query.flight_uuid){
      list = booking.filter((item)=>{
        return req.query.flight_uuid === item.flight_uuid;
      })
      return res.status(200).json(list)
    }

    if(req.query.phone){
      list = booking.filter((item)=>{
        return req.query.phone === item.phone;
      })
      return res.status(200).json(...list)
    }
    return res.status(200).json(list) */
    
  },
  // [POST] /book 요청을 수행합니다.
  // 요청 된 예약 데이터를 저장합니다.
  create: (req, res) => {
    // POST /book에서 사용할 booking_uuid입니다.
    const booking_uuid = uuid();
    const data = {...req.body, booking_uuid}; //새로운데이터
    booking.push(data);
    return res.json(data);

    /*let body = req.body;
    body.booking_uuid = booking_uuid;
    booking.push(body);
    return res.status(201).json({msg: 'Created'});*/

  },

  // Optional
  // [DELETE] /book/:booking_uuid 요청을 수행합니다.
  // 요청 된 id, phone 값과 동일한 예약 데이터를 삭제합니다.
   // TODO:
  deleteByBookingId: (req, res) => {
    const {booking_uuid} = req.params;
    //let filtered = booking.filter((e)=> e.booking_uuid !== booking_uuid)
    //return res.json(filtered)

    const idx = booking.findIndex((el)=> el.booking_uuid === booking_uuid);  //지울거를 찾는다
    booking.splice(idx, 1); // 같은거 그거 idx를 지워라.
  }
};

 

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'); // 그리고 이게 app.use에서 쓰인다. 이게 module부분이랑 연결되는거다
const bookRouter = require('./router/bookRouter');
const airportRouter = require('./router/airportRouter');

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

app.use('/flight', flightRouter);  //이게 require로 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!'); 
});
/*
-현재 미들웨어 함수가 응답을 종료하지 않는 경우 next를 호출하여 다음 미들웨어 함수에서 제어할수있도록 해야한다. 
제어를 전달하지 않으면 해당 요청은 정지상태로방치된다. next없으면 다음코드 진행못한다.
-특정 엔드포인트가 아닌 app.use를 사용해서 모든 요청에 동일한 미들웨어를 적용한다.
*/

app.use((err, req, res, next) => {
  console.error(err.stack); //에러가 발생한 위치를 알려주는게 error 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;  //이게 app.use랑 연결되는거다
728x90

'과제기록' 카테고리의 다른 글

[페어] statesairline-client  (0) 2023.02.03
[페어] beesbeesbees  (0) 2023.01.28
[project] 나만의 아고라스테이츠만들기  (0) 2023.01.10