mirror of https://github.com/pelias/api.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.9 KiB
58 lines
1.9 KiB
7 years ago
|
const not = require('predicates').not;
|
||
|
const any = require('predicates').any;
|
||
|
const all = require('predicates').all;
|
||
|
|
||
|
const sanitizers = require('../../sanitizer');
|
||
|
const predicates = require('../../controller/predicates');
|
||
|
const controllers = require('../../controller');
|
||
|
const queries = require('../../query');
|
||
|
const postProc = require('../../middleware');
|
||
|
|
||
|
const utils = require('./utils');
|
||
|
|
||
|
|
||
|
module.exports.create = (peliasConfig, esclient, services) => {
|
||
|
|
||
|
const changeLanguageShouldExecute = utils.changeLanguageShouldExecute(services);
|
||
|
|
||
|
// execute under the following conditions:
|
||
|
// - there are no errors or data
|
||
|
// - request is not coarse OR pip service is disabled
|
||
|
const nonCoarseReverseShouldExecute = all(
|
||
|
not(predicates.hasResponseDataOrRequestErrors),
|
||
|
any(
|
||
|
not(predicates.isCoarseReverse),
|
||
|
not(services.pip.isEnabled)
|
||
|
)
|
||
|
);
|
||
|
|
||
|
// fallback to coarse reverse when regular reverse didn't return anything
|
||
|
const coarseReverseShouldExecute = all(
|
||
|
services.pip.isEnabled,
|
||
|
not(predicates.hasRequestErrors),
|
||
|
not(predicates.hasResponseData)
|
||
|
);
|
||
|
|
||
|
|
||
|
return [
|
||
|
sanitizers.reverse.middleware,
|
||
|
postProc.requestLanguage,
|
||
|
postProc.calcSize(),
|
||
|
controllers.search(peliasConfig.api, esclient, queries.reverse, nonCoarseReverseShouldExecute),
|
||
|
controllers.coarse_reverse(services.pip.service, coarseReverseShouldExecute),
|
||
|
postProc.distances('point.'),
|
||
|
// reverse confidence scoring depends on distance from origin
|
||
|
// so it must be calculated first
|
||
|
postProc.confidenceScoresReverse(),
|
||
|
postProc.dedupe(),
|
||
|
postProc.accuracy(),
|
||
|
postProc.localNamingConventions(),
|
||
|
postProc.renamePlacenames(),
|
||
|
postProc.parseBoundingBox(),
|
||
|
postProc.normalizeParentIds(),
|
||
|
postProc.changeLanguage(services.language.service, changeLanguageShouldExecute),
|
||
|
postProc.assignLabels(),
|
||
|
postProc.geocodeJSON(peliasConfig.api, utils.base),
|
||
|
postProc.sendJSON
|
||
|
];
|
||
|
};
|