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") module.exports = dbConn => { router.get("/api/v1/search", searchHandler(dbConn)); router.get("/api/v1/search/presets", presetHandler(dbConn)); return router; }; function presetHandler(dbConn) { return function (req, res) { getSearchPresets(dbConn).then(presets => { res.json(presets) }).catch(error => { // TODO error handling }) } } function searchHandler(dbConn) { const scoreAndSearch = sas(dbConn) return function (req, res) { let response = {} response.meta = { params: req.params, query: req.query, headers: req.headers } let q = req.query.q ? base64.base64ToObj(req.query.q) : req.query console.log('Q:', q) let scoreQueryObj = {} if (q.temperature) scoreQueryObj['temperature_mean_max'] = q.temperature if (q.percipitation) scoreQueryObj['percipitation'] = q.percipitation if (q.raindays) scoreQueryObj['raindays'] = q.raindays if (q.sunhours) scoreQueryObj['sunhours'] = q.sunhours // @TimoJ 1. hier die Parameter die gescored werden sollen hinufügen if (_.isEmpty(scoreQueryObj)) { res.status(400).send('provide at least one search parameter.'); } scoreAndSearch(q.from, q.to, scoreQueryObj).then(searchResults => { // TODO hier könnten Suchergebnisse gefiltert werden: für Textsuche oder Exludes.... response.data = searchResults res.json(response) }).catch(e => { // TODO error handling console.log(e) res.json(e.message) }) } }