Compare commits

...

2 Commits

Author SHA1 Message Date
eed19a225f Better memory and time usage 2023-08-11 19:14:36 +02:00
4d61358e03 Import airports and flights data 2023-08-11 18:07:34 +02:00
5 changed files with 51 additions and 2 deletions

1
.gitignore vendored
View File

@ -8,6 +8,7 @@ node_modules
# testing # testing
coverage coverage
*.sqlite3 *.sqlite3
data/
# production # production
build/ build/

View File

@ -1,9 +1,13 @@
import { useState } from 'react';
import './App.css'; import './App.css';
function App() { function App() {
let [content, setContent] = useState("Loading…")
fetch('/api/').then(res => res.json()).then(data => setContent(data['message']))
return ( return (
<div className="App"> <div className="App">
Hello world! {content}
</div> </div>
); );
} }

View File

@ -6,6 +6,7 @@
"scripts": { "scripts": {
"build": "cd client && npm run build", "build": "cd client && npm run build",
"dev": "nodemon --exec npm start", "dev": "nodemon --exec npm start",
"import": "node server/cli/import.js",
"migrate": "npm run migrate:up", "migrate": "npm run migrate:up",
"migrate:up": "cd server && npx sequelize-cli db:migrate", "migrate:up": "cd server && npx sequelize-cli db:migrate",
"migrate:undo": "cd server && npx sequelize-cli db:migrate:undo", "migrate:undo": "cd server && npx sequelize-cli db:migrate:undo",

43
server/cli/import.js Normal file
View File

@ -0,0 +1,43 @@
const fs = require('fs')
const db = require("../models")
const Airport = db['Airport']
const Flight = db['Flight']
db.sequelize.sync().then(() => (async () => {
// Refresh airport data
let airportData = await fs.promises.readFile(`${__dirname}/../data/airports.json`, 'utf-8')
airportData = JSON.parse(airportData)
let icao_codes = []
let iata_codes = []
let results = await Airport.findAll({attributes: ['icao_code', 'iata_code']})
for (let result of results) {
if (result.icao_code)
icao_codes.push(result.icao_code)
if (result.iata_code)
iata_codes.push(result.iata_code)
}
// Import all not-imported airports
await Airport.bulkCreate(airportData['response'].filter(airport => !icao_codes.includes(airport.icao_code)
&& !iata_codes.includes(airport.iata_code)))
// Import flight routes per departure
let airports = await Airport.findAll({attributes: ['icao_code']})
for (let airport of airports) {
const airportRoutesFile = `${__dirname}/../data/routes/${airport.icao_code}.json`
// Ignore unexisting files
if (!(await fs.promises.stat(airportRoutesFile).catch(() => false)))
continue
// Read routes
let flightsData = await fs.promises.readFile(airportRoutesFile, 'utf-8')
flightsData = JSON.parse(flightsData)
// First remove old routes
await Flight.destroy({where: {dep_icao: airport.icao_code}})
// Then import new routes
await Flight.bulkCreate(flightsData['response'])
}
})())

View File

@ -19,7 +19,7 @@ app.get("/api", (req, res) => {
}) })
app.get("/api/airports", (req, res) => { app.get("/api/airports", (req, res) => {
res.json(Airport.findAll()) Airport.findAll().then(airports => res.json(airports))
}) })
app.get("/api/airport/:id", (req, res) => { app.get("/api/airport/:id", (req, res) => {