70 lines
3.7 KiB
JavaScript
70 lines
3.7 KiB
JavaScript
const arrayFormatting = require("../util/databaseArrayFormatting.js");
|
|
const { allTagsWithValues } = require("./getTags.js");
|
|
|
|
module.exports = async (dbConn) => {
|
|
const sqlRegions = `SELECT regions.id AS region_id,
|
|
regions.region AS name,
|
|
countries.country AS country,
|
|
regions.description AS description,
|
|
regions.lon AS lon,
|
|
regions.lat AS lat,
|
|
rcma.temperature_mean AS temperature_mean,
|
|
rcma.temperature_mean_min AS temperature_mean_min,
|
|
rcma.temperature_mean_max AS temperature_mean_max,
|
|
rcma.precipitation AS precipitation,
|
|
rcma.rain_days AS rain_days,
|
|
rcma.sun_hours AS sun_hours,
|
|
rcma.humidity AS humidity,
|
|
regions_byt.average_per_day_costs AS average_per_day_costs,
|
|
rtma.avg_price_relative AS avg_price_relative,
|
|
regions_byt.accommodation_costs AS accommodation_costs,
|
|
regions_byt.food_costs AS food_costs,
|
|
regions_byt.water_costs AS water_costs,
|
|
regions_byt.local_transportation_costs AS local_transportation_costs,
|
|
regions_byt.entertainment_costs AS entertainment_costs,
|
|
regions_byt.alcohol_costs AS alcohol_costs
|
|
FROM regions
|
|
LEFT JOIN countries ON regions.country_id = countries.id
|
|
LEFT JOIN (SELECT rcma.region_id,
|
|
GROUP_CONCAT(rcma.temperature_mean ORDER BY rcma.month SEPARATOR ', ') AS temperature_mean,
|
|
GROUP_CONCAT(rcma.temperature_mean_min ORDER BY rcma.month SEPARATOR ', ') AS temperature_mean_min,
|
|
GROUP_CONCAT(rcma.temperature_mean_max ORDER BY rcma.month SEPARATOR ', ') AS temperature_mean_max,
|
|
GROUP_CONCAT(rcma.precipitation ORDER BY rcma.month SEPARATOR ', ') AS precipitation,
|
|
GROUP_CONCAT(rcma.rain_days ORDER BY rcma.month SEPARATOR ', ') AS rain_days,
|
|
GROUP_CONCAT(rcma.sun_hours ORDER BY rcma.month SEPARATOR ', ') AS sun_hours,
|
|
GROUP_CONCAT(rcma.humidity ORDER BY rcma.month SEPARATOR ', ') AS humidity
|
|
FROM region_climate_monthly_avg AS rcma
|
|
GROUP BY rcma.region_id) rcma ON rcma.region_id = regions.id
|
|
LEFT JOIN regions_byt ON regions.id = regions_byt.region_id
|
|
LEFT JOIN (SELECT rtma.region_id,
|
|
GROUP_CONCAT(rtma.avg_price_relative ORDER BY rtma.month SEPARATOR ', ') AS avg_price_relative
|
|
FROM regions_trivago_monthly_avg AS rtma
|
|
GROUP BY rtma.region_id) rtma
|
|
ON regions.id = rtma.region_id
|
|
WHERE regions_byt.travelstyle = 1`
|
|
|
|
const [regions, tags] = await Promise.all([dbConn.query(sqlRegions), allTagsWithValues(dbConn)])
|
|
|
|
for (k = 0; k < regions.length; k++) {
|
|
regions[k].avg_price_relative = arrayFormatting(regions[k].avg_price_relative);
|
|
regions[k].temperature_mean = arrayFormatting(regions[k].temperature_mean);
|
|
regions[k].temperature_mean_min = arrayFormatting(regions[k].temperature_mean_min);
|
|
regions[k].temperature_mean_max = arrayFormatting(regions[k].temperature_mean_max);
|
|
regions[k].precipitation = arrayFormatting(regions[k].precipitation);
|
|
regions[k].rain_days = arrayFormatting(regions[k].rain_days);
|
|
regions[k].sun_hours = arrayFormatting(regions[k].sun_hours);
|
|
regions[k].humidity = arrayFormatting(regions[k].humidity);
|
|
}
|
|
|
|
|
|
return regions.map(region => {
|
|
region.tags = tags.filter(tag => tag.region_id === region.region_id).map(tag => {
|
|
delete tag.region_id
|
|
return tag
|
|
})
|
|
|
|
return region
|
|
});
|
|
};
|
|
|