86 lines
2.3 KiB
JavaScript

const express = require("express")
const path = require("path")
const db = require("./models")
const Airport = db['Airport']
const Flight = db['Flight']
db.sequelize.sync().then(() => console.log("DB synced."))
const PORT = process.env.PORT || 3001
const app = express()
app.use(express.static(path.resolve(__dirname, '../client/build')))
app.use(express.json())
app.get("/api", (req, res) => {
res.json({ message: "Hello from server!" })
})
app.get("/api/airports", (req, res) => {
const search = req.query.search.toLowerCase()
let options = {}
if (search) {
let or_array = []
for (let col_name of ['name', 'icao_code', 'iata_code'])
or_array.push(db.sequelize.where(db.sequelize.fn('lower', db.sequelize.col(col_name)),
{[db.Sequelize.Op.like]: `%${search}%`}))
options.where = {[db.Sequelize.Op.or]: or_array}
}
options.limit = 10
if (req.query.limit) {
const limit = parseInt(req.query.limit)
if (limit >= 1)
options.limit = limit
}
if (req.query.page) {
const page = parseInt(req.query.page)
if (page > 1)
options.offset = (page - 1) * options.limit
}
Airport.findAll(options).then(airports => res.json(airports))
})
app.get("/api/airport/:icao_code", (req, res) => {
const icao_code = req.params.icao_code
Airport.findOne({where: {icao_code: icao_code}}).then(data => {
if (data)
res.json(data)
else
res.status(404).json({message: `Cannot find airport with id=${id}`})
})
})
app.get("/api/flights/:dep_icao", (req, res) => {
const dep_icao = req.params.dep_icao
Flight.findAll({order: [['dep_time_utc']], where: {dep_icao: dep_icao}}).then(data => {
if (data)
res.json(data)
else
res.status(500).json({message: `An error occurred while fetching flights.`})
})
})
app.get("/api/flights/:dep_icao/:arr_icao", (req, res) => {
const dep_icao = req.params.dep_icao
const arr_icao = req.params.arr_icao
Flight.findAll({order: [['dep_time_utc']], where: {dep_icao: dep_icao, arr_icao: arr_icao}}).then(data => {
if (data)
res.json(data)
else
res.status(500).json({message: `An error occurred while fetching flights.`})
})
})
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, '../client/build', req.path))
})
app.listen(PORT, () => {
console.log(`Server listening on ${PORT}`)
})