Add initial version of dijkstra backend cloudron image

This commit is contained in:
2020-10-12 11:27:15 +02:00
commit 4f5db9ab26
4209 changed files with 448228 additions and 0 deletions

22
api/models/citiesModel.js Normal file
View File

@@ -0,0 +1,22 @@
const db = require('../../data/dbConfig');
module.exports = {
getCities,
getCitiesByCountry
// getCity,
};
function getCities() {
return db('cities')
}
function getCitiesByCountry(country_id) {
return db('cities')
.where({ country_id })
}
// function getCity(name) {
// return db('cities')
// .where({ name })
// .first()
// }

View File

@@ -0,0 +1,16 @@
const db = require('../../data/dbConfig');
module.exports = {
getCountries,
getCountryByName,
};
function getCountries() {
return db('countries')
}
function getCountryByName(name) {
return db('countries')
.where({ name })
.first()
}

9
api/models/roadsModel.js Normal file
View File

@@ -0,0 +1,9 @@
const db = require('../../data/dbConfig');
module.exports = {
getRoads
};
function getRoads() {
return db('roads')
}

View File

@@ -0,0 +1,14 @@
const router = require('express').Router();
const Cities = require('../models/citiesModel');
router.get('', async (req, res) => {
try {
const cities = await Cities.getCities();
res.status(200).json(cities);
} catch (e) {
res.status(500).json(e);
}
})
module.exports = router;

View File

@@ -0,0 +1,14 @@
const router = require('express').Router();
const Cities = require('../models/citiesModel');
router.get('/:country_id', async (req, res) => {
const { country_id } = req.params;
try {
const cities = await Cities.getCitiesByCountry(country_id);
res.status(200).json(cities);
} catch (e) {
res.status(500).json(e);
}
})
module.exports = router;

43
api/routes/pathRouter.js Normal file
View File

@@ -0,0 +1,43 @@
const router = require('express').Router();
const Roads = require('../models/roadsModel');
const Cities = require('../models/citiesModel');
const findShortestPath = require('../../helpers/dijkstra_algo');
router.get('', async (req, res) => {
const { start_city_id, end_city_id } = req.query;
start = Math.floor(start_city_id);
end = Math.floor(end_city_id);
try {
const cities = await Cities.getCities();
const roads = await Roads.getRoads();
let { path, distance } = findShortestPath(cities, roads, start, end);
const shortestPath = formatPath(path, cities)
let response = { path: shortestPath, distance }
res.status(200).json(response);
} catch (e) {
res.status(500).json(e);
}
})
function formatPath(path, cities) {
const complete_path = []
for (let path_city of path) {
for (let city of cities) {
if (city.id == path_city) {
complete_path.push({ id: city.id, name: city.name });
}
}
}
return complete_path
}
module.exports = router;

13
api/routes/roadsRouter.js Normal file
View File

@@ -0,0 +1,13 @@
const router = require('express').Router();
const Roads = require('../models/roadsModel');
router.get('', async (req, res) => {
try {
const roads = await Roads.getRoads();
res.status(200).json(roads);
} catch (e) {
res.status(500).json(e);
}
})
module.exports = router;

21
api/server.js Normal file
View File

@@ -0,0 +1,21 @@
const express = require("express");
const helmet = require('helmet');
const cors = require('cors');
const citiesRouter = require('./routes/citiesRouter');
const roadsRouter = require('./routes/roadsRouter');
const countriesRouter = require('./routes/countriesRouter');
const pathRouter = require('./routes/pathRouter')
const server = express();
server.use(helmet());
server.use(express.json());
server.use(cors());
server.use('/api/cities', citiesRouter);
server.use('/api/roads', roadsRouter);
server.use('/api/countries', countriesRouter);
server.use('/api/path', pathRouter);
module.exports = server;