kopia lustrzana https://github.com/manuelkasper/sotlas-api
69 wiersze
2.1 KiB
JavaScript
69 wiersze
2.1 KiB
JavaScript
const moment = require('moment');
|
|
const db = require('./db');
|
|
|
|
module.exports = {
|
|
lookupSummits: function(objects) {
|
|
// Get all summit refs so we can look them all up in one go
|
|
let summitCodes = new Set();
|
|
let associationCodes = new Set();
|
|
objects.forEach(obj => {
|
|
summitCodes.add(obj.summit.code);
|
|
associationCodes.add(obj.summit.code.substring(0, obj.summit.code.indexOf('/')));
|
|
});
|
|
|
|
return new Promise((resolve, reject) => {
|
|
db.getDb().collection('summits').find({code: {$in: [...summitCodes]}}, {projection: {'_id': false, code: true, name: true, altitude: true, points: true, coordinates: true, activationCount: true, validFrom: true, validTo: true, 'photos.author': true}})
|
|
.toArray((err, summits) => {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
|
|
let summitMap = {};
|
|
let now = moment();
|
|
summits.forEach(summit => {
|
|
if (now.isBefore(summit.validFrom) || now.isAfter(summit.validTo)) {
|
|
summit.invalid = true;
|
|
}
|
|
delete summit.validFrom;
|
|
delete summit.validTo;
|
|
if (summit.photos) {
|
|
let photoAuthors = new Set();
|
|
summit.photos.forEach(photo => {
|
|
photoAuthors.add(photo.author);
|
|
});
|
|
summit.photoAuthors = [...photoAuthors];
|
|
delete summit.photos;
|
|
}
|
|
summitMap[summit.code] = summit;
|
|
});
|
|
|
|
db.getDb().collection('associations').find({code: {$in: [...associationCodes]}}).toArray((err, associations) => {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
|
|
let associationMap = {};
|
|
associations.forEach(association => {
|
|
associationMap[association.code] = association;
|
|
});
|
|
|
|
objects.forEach(object => {
|
|
let association = object.summit.code.substring(0, object.summit.code.indexOf('/'));
|
|
if (summitMap[object.summit.code]) {
|
|
object.summit = summitMap[object.summit.code];
|
|
if (object.summit) {
|
|
object.summit.isoCode = associationMap[association].isoCode;
|
|
object.summit.continent = associationMap[association].continent;
|
|
}
|
|
}
|
|
});
|
|
|
|
resolve(objects);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
}
|