diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..b1bea1e --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,27 @@ +FROM node:12 + +# Create app directory +WORKDIR /usr/src/app + +# COPY package.json . +# For npm@5 or later, copy package-lock.json as well +COPY package.json package-lock.json ./ + +# Install app dependencies +RUN npm install + +# Bundle app source +COPY . . + +ENV PORT=3000 +ENV METEOSTAT_API_KEY=LMlDskju +ENV DB_HOST=127.0.0.1 +ENV DB_USER=root +ENV DB_PASSWORD=devtest +ENV DB_PORT=3306 +ENV DATABASE=travopti + +EXPOSE 3000 + +# Start Node server +CMD [ "node", "./index.js" ] \ No newline at end of file diff --git a/backend/routes/search.js b/backend/routes/search.js index 7bbe5b7..ecd55a0 100644 --- a/backend/routes/search.js +++ b/backend/routes/search.js @@ -2,7 +2,8 @@ const router = require("express").Router(); const _ = require('lodash') const getSearchPresets = require("../models/getSearchPresets.js"); const base64 = require("../util/base64.js") -const sas = require("../util/scoreAndSearch.js") +const sas = require("../util/scoreAndSearch.js"); +const { filter } = require("lodash"); module.exports = dbConn => { @@ -57,8 +58,13 @@ function searchHandler(dbConn) { } scoreAndSearch(q.from, q.to, scoreQueryObj).then(searchResults => { - response.data = searchResults - response = searchResults + //response.data = searchResults + // FILTER if query contains filterString + if (q.textfilter) { + response = filterByString(searchResults, q.textfilter, q.fulltext) + } else { + response = searchResults + } res.json(response) }).catch(e => { // TODO error handling @@ -66,4 +72,19 @@ function searchHandler(dbConn) { res.json(e.message) }) } +} + +function filterByString(searchResults, filterString, boolFulltext) { + return _.filter(searchResults, region => { + console.log("filtering: filterString, boolFulltext"); + console.log(filterString, boolFulltext); + filterString = filterString.toLowerCase() + let name = region.name.toLowerCase() + let country = region.country.toLowerCase() + if (boolFulltext) { + let desc = region.description.toLowerCase() + return name.includes(filterString) || country.includes(filterString) || desc.includes(filterString) + } + return name.includes(filterString) || country.includes(filterString) + }) } \ No newline at end of file diff --git a/backend/util/getClimateMinMax.js b/backend/util/getClimateMinMax.js index aaefd7d..3e730cd 100644 --- a/backend/util/getClimateMinMax.js +++ b/backend/util/getClimateMinMax.js @@ -5,16 +5,16 @@ exports.getClimateMinMax = async function (dbConn) { MIN(temperature_mean_min) AS temperature_mean_min, MIN(temperature_mean_max) AS temperature_mean_max, MIN(precipitation) AS precipitation, - MIN(raindays) AS rain_days, - MIN(sunshine) AS sun_hours + MIN(rain_days) AS rain_days, + MIN(sun_hours) AS sun_hours 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(precipitation) AS precipitation, - MAX(raindays) AS rain_days, - MAX(sunshine) AS sun_hours + MAX(rain_days) AS rain_days, + MAX(sun_hours) AS sun_hours FROM region_climate` const [qResMin, qResMax] = await Promise.all([dbConn.query(sqlMin), dbConn.query(sqlMax)]) // console.log(qResMin)