festivals-importer
Version:
185 lines (154 loc) • 4.8 kB
JavaScript
var async = require('async');
var moment = require('moment');
var config = require('config');
var meta = require('./meta');
var PlacesImporter = require('./importer/places').PlacesImporter;
var CategoriesImporter = require('./importer/categories').CategoriesImporter;
var NewsImporter = require('./importer/news').NewsImporter;
var EventsImporter = require('./importer/events').EventsImporter;
var FestivalsApi = require('festivals-client').FestivalsApi;
var Festivals = require('festivals-client').Festivals;
var createClient = function createClient(token) {
var options = {
domain: config.client.host
};
var client = new FestivalsApi(options);
client.setBearerToken(token);
return new Festivals(client);
};
var getFestival = function getFestival(festivalsClient, name, callback) {
var query = {
name: name
};
festivalsClient.getFestivals(query, function (err, response, body) {
if (err) {
return callback(err);
}
if (response.statusCode !== 200 || body.total === 0) {
var now = moment();
var data = {
name: name,
description: name,
type: 'FANTASY',
tags: [],
duration: {
startAt: now.toISOString(),
finishAt: moment(now).add(2, 'days').toISOString()
},
locations: [
{
name: 'Międzynarodowe targi Poznańskie',
state: 'wielkopolskie',
country: 'PL',
street: 'street',
zip: 'zip',
openingTimes: [
{
startAt: now.toISOString(),
finishAt: moment(now).add(8, 'hours').toISOString()
}
]
}
],
images: [
{
url: 'http://podgk.pl/wp-content/uploads/2011/06/dni_fantastyki_podgk.jpg',
order: 0
}
]
};
festivalsClient.createFestival(data, function (err, response, body) {
if (err) {
return callback(err);
}
if (response.statusCode === 201 && body) {
return callback(null, body);
}
return callback(new Error('Failed to create festival: ' + data));
});
}
else {
return callback(null, body.festivals[0]);
}
});
};
var importFestival = function importFestival(name, template, data, token, callback) {
var festivalsClient = createClient(token);
var placesImporter = new PlacesImporter(festivalsClient);
var categoriesImporter = new CategoriesImporter(festivalsClient);
getFestival(festivalsClient, name, function (err, festival) {
if (err) {
return callback(err);
}
template.handle(data, function (err, templateData) {
if (err) {
return callback(err);
}
var festivalId = festival.id;
async.parallel({
categories: function (cb) {
categoriesImporter.importCategories(festivalId, templateData, function (err, result) {
if (err) {
return cb(err);
}
return cb(null, result);
});
},
places: function (cb) {
placesImporter.importPlaces(festivalId, templateData, function (err, result) {
if (err) {
return cb(err);
}
return cb(null, result);
});
}
},
function (err, results) {
if (err) {
return callback(err);
}
var eventsImporter = new EventsImporter(
festivalsClient,
festivalId,
results.categories,
results.places
);
eventsImporter.importEvents(templateData, function (err, events) {
if (err) {
return callback(err);
}
//console.dir(events, {depth: null});
return callback(null, events);
});
});
});
});
};
var importNews = function importNews(name, template, data, token, callback) {
var festivalsClient = createClient(token);
var newsImporter = new NewsImporter(festivalsClient);
getFestival(festivalsClient, name, function (err, festival) {
if (err) {
return callback(err);
}
template.handle(data, function (err, templateData) {
if (err) {
return callback(err);
}
//console.dir(templateData, {depth: null});
var festivalId = festival.id;
newsImporter.importNews(festivalId, templateData, function (err, result) {
if (err) {
return cb(err);
}
//console.dir(result, {depth: null});
return callback(null, result);
});
});
});
};
module.exports = {
VERSION: meta.VERSION,
importFestival: importFestival,
importNews: importNews
};