Split up massive app.js in small files

This commit is contained in:
Timo John 2020-06-16 00:50:43 +02:00
parent 0f0f8eb590
commit 32e8e6cf59
14 changed files with 110 additions and 16 deletions

View File

@ -1,3 +1,4 @@
PORT=
METEOSTAT_API_KEY=
DB_HOST=
DB_USER=

View File

@ -19,7 +19,6 @@ const app = express();
(async () => {
try {
// console.log(process.env);
const dbConn = await dbConnection();
// Express middleware

View File

@ -0,0 +1,6 @@
{
"temperature_mean_max": 5,
"percipitation": 3.5,
"raindays": 3,
"sunhours": 2.5
}

View File

@ -0,0 +1,6 @@
{
"id": 29837,
"parameter": "temperature",
"label": "warm",
"values": [22, 25]
}

View File

@ -0,0 +1,15 @@
function getAllRegionsWithClimatePerMonth(month) {
console.log('getAllRegionsWithClimatePerMonth')
const sql = `SELECT
region_climate.region_id AS region_id,
regions.country_id AS country_id,
regions.region AS name,
ROUND(AVG(region_climate.temperature_mean), 1) AS temperature_mean,
ROUND(AVG(region_climate.temperature_mean_min), 1) AS temperature_mean_min,
ROUND(AVG(region_climate.temperature_mean_max), 1) AS temperature_mean_max,
ROUND(AVG(region_climate.percipitation), 1) AS percipitation,
ROUND(AVG(region_climate.raindays), 1) AS raindays,
ROUND(AVG(region_climate.sunshine), 1) AS sunhours
FROM region_climate JOIN regions ON region_climate.region_id = regions.id WHERE region_climate.month = ${month} GROUP BY region_id`
return getQueryRows(sql)
}

View File

@ -0,0 +1,22 @@
async function getClimateMinMax() {
console.log('getClimateMinMax')
const sqlMin = `SELECT
MIN(temperature_mean) AS temperature_mean,
MIN(temperature_mean_min) AS temperature_mean_min,
MIN(temperature_mean_max) AS temperature_mean_max,
MIN(percipitation) AS percipitation,
MIN(raindays) AS raindays,
MIN(sunshine) AS sunhours
FROM region_climate`
const sqlMax = `SELECT
MAX(temperature_mean) AS temperature_mean,
MAX(temperature_mean_min) AS temperature_mean_min,
MAX(temperature_mean_max) AS temperature_mean_max,
MAX(percipitation) AS percipitation,
MAX(raindays) AS raindays,
MAX(sunshine) AS sunhours
FROM region_climate`
const [qResMin, qResMax] = await Promise.all([getQueryRows(sqlMin), getQueryRows(sqlMax)])
//console.log(qResMin)
return { min: qResMin[0], max: qResMax[0] }
}

View File

@ -0,0 +1,5 @@
function getClimatePerRegionAndMonth(regionId, month) {
console.log('getClimatePerRegionAndMonth')
const sql = `SELECT region_id, AVG(temperature_mean), AVG(temperature_mean_min), AVG(temperature_mean_max), AVG(percipitation), AVG(sunshine) FROM region_climate WHERE month = ${month} AND region_id = ${regionId}`
return getQueryRows(sql)
}

View File

@ -0,0 +1,14 @@
module.exports = async (dbConn, lat, long, radius) => {
const regions = await dbConn.query(
`SELECT regions.id AS region_id,
regions.region AS name,
regions.country_id AS country_id,
countries.country AS country,
regions.meteostat_id AS meteostat_id
FROM regions
JOIN countries
ON regions.country_id = countries.id`
);
return regions;
};

View File

@ -1,6 +1,6 @@
module.exports = async (dbConn, name) => {
const res = await dbConn.query(
);
return res[0];
// TODO: Implement pulling data from database
const presets = require ("../mockdata/sample-presets.json")
const res = presets
return res;
};

View File

@ -1,22 +1,24 @@
require('dotenv').config()
const axios = require('axios')
// TODO: Automatically retrieve dates via aviable Data
const rangeStartDate = '2010-01' // If no date is given, this date will be used as startDate
const rangeEndDate = '2018-12'// If no date is given, this date will be used as endDate
// TODO: call method periodically, not over API
module.exports = async (dbConn, startDate = rangeStartDate, endDate = rangeEndDate) => {
console.log('update climate with:', startDate, endDate);
const result = await dbConn.query(`SELECT * FROM regions WHERE meteostat_id IS NOT NULL`)
const temp2 = await Promise.all(result.map(src => createClimateObjectFrom(src, startDate, endDate)))
const final2 = temp2.reduce((total, element) => total.concat(element), [])
const climateObject = await Promise.all(result.map(src => createClimateObjectFrom(src, startDate, endDate)))
const climateObjectArr = climateObject.reduce((total, element) => total.concat(element), [])
await writeToDatabase(dbConn, final2)
await writeToDatabase(dbConn, climateObjectArr)
const res = 'region_climate update complete. see backend logs for info.'
console.log(res)
return res
}
async function createClimateObjectFrom(src, startDate, endDate) {

View File

@ -2,13 +2,8 @@ const router = require("express").Router();
const getRegions = require("../models/getRegions.js");
module.exports = dbConn => {
router.get("/api/v1/search", async (req, res) => {
const query = req.query.q;
if (query != undefined) {
res.json(await getRegions(dbConn, query));
} else {
res.status(400).send();
}
router.get("/api/v1/regions", async (req, res) => {
res.json(await getRegions(dbConn));
});
return router;

View File

@ -0,0 +1,15 @@
function calculateScores(type, regionDataRows, searchLowParam, searchMaxParam, minMax) {
console.log('calculateScores for', type)
let result = regionDataRows.map(x => {
const sc = Math.round(score.calculateScoreRange(minMax.min[type], minMax.max[type], multiplier[type], x[type], searchLowParam, searchMaxParam) * 100) / 100
return {
region_id: x.region_id,
type: type,
value: x[type],
score: x[type] === null ? null : sc
}
})
return result
}

View File

@ -0,0 +1,14 @@
function oldToNewQuerySyntax(queries) {
let res = {}
try {
if (queries.temperature_mean_max) res.temperature_mean_max = [queries.temperature_mean_max.split(',')[0], queries.temperature_mean_max.split(',')[1]]
if (queries.percipitation) res.percipitation = [queries.percipitation.split(',')[0], queries.percipitation.split(',')[1]]
if (queries.raindays) res.raindays = [queries.raindays.split(',')[0], queries.raindays.split(',')[1]]
if (queries.sunhours) res.sunhours = [queries.sunhours.split(',')[0], queries.sunhours.split(',')[1]]
console.log('queries successfully transformed');
} catch (error) {
console.log('queries are ok');
return queries
}
return res
}

View File