UNPKG

yolo-tips

Version:

Cheap Flight Suggester, that suggests you weekend trips based on the cheapest deals it finds using SkyScanner.

73 lines (70 loc) 2.6 kB
'use strict' const merge = require('lodash.merge') const first = require('lodash.first') const flatten = require('lodash.flatten') const humps = require('humps').camelizeKeys const skyscanner = require('./skyscanner') const presenter = require('./presenter') module.exports = search function search (options, cb) { skyscanner({ currency: options.currency || 'EUR', country: options.country || 'PT' }) .destinations(options.origin, options.destination, options) .then(function (payload) { const data = humps(payload) if (data.routes) { return cb(null, flatten(data.routes.map(unwind)) .map(populate).filter(removeInvalid).map(presenter)) } return cb(null, []) function unwind (route) { return data.quotes .filter(function (quote) { return quote.routeId === route.routeId }) .map(function (quote) { return merge(route, quote) }) } function populate (route) { route.outboundFromStationId = first(data.places.filter(function (place) { return place.placeId === route.outboundFromStationId })) route.outboundToStationId = first(data.places.filter(function (place) { return place.placeId === route.outboundToStationId })) route.inboundToStationId = first(data.places.filter(function (place) { return place.placeId === route.inboundToStationId })) route.inboundFromStationId = first(data.places.filter(function (place) { return place.placeId === route.inboundFromStationId })) route.outboundAgentIds = first(route.outboundAgentIds.map(function (id) { return data.agents.filter(function (agent) { return agent.agentId === id }) })) route.inboundAgentIds = first(route.inboundAgentIds.map(function (id) { return data.agents.filter(function (agent) { return agent.agentId === id }) })) route.outboundCarrierIds = first(route.outboundCarrierIds.map(function (id) { return data.carriers.filter(function (carrier) { return carrier.carrierId === id }) })) route.inboundCarrierIds = first(route.inboundCarrierIds.map(function (id) { return data.carriers.filter(function (carrier) { return carrier.carrierId === id }) })) return route } function removeInvalid (route) { return route.outboundFromStationId !== void 0 } }).catch(cb) }