Skip to content

Instantly share code, notes, and snippets.

@scarletsky
Last active August 29, 2015 14:02
Show Gist options
  • Save scarletsky/ebfd2697a44b972461c9 to your computer and use it in GitHub Desktop.
Save scarletsky/ebfd2697a44b972461c9 to your computer and use it in GitHub Desktop.
Valkyrie Project Test Data
var fs = require('fs');
var mongoose = require('mongoose');
var models = require('./app/models');
var async = require('async');
var shell = require('shelljs');
var eventproxy = require('eventproxy');
var ep = new eventproxy.EventProxy();
var User = models.User;
var Source = models.Source;
var Character = models.Character;
var Quote = models.Quote;
var env = 'development';
var config = require('./config/config')[env];
var data = [];
fs.readdirSync('./data/').forEach(function (filename) {
var name = filename.replace('.js', '');
var fileData = require('./data/' + name)[name];
data.push(fileData);
});
var connect = function () {
var options = {
server: {
socketOptions: {
keepAlive: 1
}
}
};
mongoose.connect(config.db, options);
};
connect();
async.waterfall([
// remove index
function (callback) {
shell.exec('curl -XDELETE "http://localhost:9200/sources/"', {silent:true});
shell.exec('curl -XDELETE "http://localhost:9200/characters/"', {silent:true});
shell.exec('curl -XDELETE "http://localhost:9200/quotes/"', {silent:true});
console.log('indexes remove successfully');
callback(null);
},
// remove useres
function (callback) {
User.remove(function (err) {
console.log('users remove successfully');
callback(null);
});
},
// remove sources
function (callback) {
Source.remove(function (err) {
console.log('sources remove successfully');
callback(null);
});
},
// remove characters
function (callback) {
Character.remove(function (err) {
console.log('characters remove successfully');
callback(null);
});
},
//remove quotes
function (callback) {
Quote.remove(function (err) {
console.log('quotes remove successfully');
callback(null);
});
},
// insert users
function (callback) {
var userX = {username: 'hello', password: 'world'};
var user = new User(userX);
user.save(function () {
console.log('user ' + userX.username + ' init successfully!');
callback(null, user);
});
},
// insert data
function (user, callback) {
// insert sources
async.each(data, function (object, callback) {
var sourceX = {
name: object.name,
alias: object.alias,
info: object.info,
cover: object.cover,
contributorId: user._id
};
var newSource = new Source(sourceX);
newSource.save();
(function (source, characters) {
// insert characters
async.each(characters, function (character, callback) {
var characterX = {
name: character.name,
alias: character.alias,
info: character.info,
avatar: character.avatar,
sourceId: newSource._id,
quotesCount: 0,
contributorId: user._id
};
var newCharacter = new Character(characterX);
newCharacter.save(function (err) {
callback();
});
}, function (err) {
if (err) {
console.log(err);
} else {
ep.emit('source' + source._id + 'charactersok');
}
});
})(newSource, object.characters);
(function (source, quotes) {
// insert quotes
ep.once('source' + source._id + 'charactersok', function () {
async.each(quotes, function (quote, callback) {
var characterIds = [];
var quoteX = {
quote: quote.quote,
likeCount: 0,
scene: quote.scene,
tags: quote.tags,
reference: quote.reference,
contributorId: user._id
};
var newQuote = new Quote(quoteX);
// query quote's characters
async.map(quote.characters, function (characterName, callback) {
Character
.findOneAndUpdate({
sourceId: source._id,
$or: [
{name: characterName},
{alias: characterName}
]
}, {
$inc: {
quotesCount: 1
}
})
.exec(function (err, character) {
if (err) {
return console.log(err);
} else {
callback(null, character._id);
}
});
}, function (err, characterIds) {
newQuote.characterIds = characterIds;
newQuote.save(function () {
callback(null); // what's this?
});
}); // end of async on mapping characterIds of quote
}, function () {
callback(null); // what's this?
}); // end of async on inserting quotes
}); // end of event proxy
})(newSource, object.quotes);
}, function (err) {
// finish!
callback(null);
});
}
// finish
], function (err, results) {
if (err) {
console.log(err);
process.exit(1);
}
console.log('----- insert finished -----');
setTimeout(function () {
console.log('----- adding index -----');
shell.exec('node addIndex.js');
console.log('----- adding index finished -----');
process.exit(0);
}, 1000);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment