66 lines
No EOL
1.8 KiB
JavaScript
66 lines
No EOL
1.8 KiB
JavaScript
// external modules
|
|
var async = require('async');
|
|
|
|
// core
|
|
var config = require("../config.js");
|
|
var logger = require("../logger.js");
|
|
var models = require("../models");
|
|
|
|
process.on('message', function (data) {
|
|
if (!data || !data.msg || data.msg !== 'update history' || !data.caches) return process.exit();
|
|
var caches = data.caches;
|
|
async.each(Object.keys(caches), function (key, callback) {
|
|
var cache = caches[key];
|
|
if (config.debug) logger.info("history updater found dirty history: " + key);
|
|
var history = parseHistoryToArray(cache);
|
|
finishUpdateHistory(key, history, function (err, count) {
|
|
if (err) return callback(err, null);
|
|
if (!count) return callback(null, null);
|
|
process.send({
|
|
msg: 'check',
|
|
userid: key
|
|
});
|
|
return callback(null, null);
|
|
});
|
|
}, function (err) {
|
|
if (err) logger.error('history updater error', err);
|
|
process.exit();
|
|
});
|
|
});
|
|
|
|
function finishUpdateHistory(userid, history, callback) {
|
|
models.User.update({
|
|
history: JSON.stringify(history)
|
|
}, {
|
|
where: {
|
|
id: userid
|
|
}
|
|
}).then(function (count) {
|
|
return callback(null, count);
|
|
}).catch(function (err) {
|
|
return callback(err, null);
|
|
});
|
|
}
|
|
|
|
function parseHistoryToArray(history) {
|
|
var _history = [];
|
|
Object.keys(history).forEach(function (key) {
|
|
var item = history[key];
|
|
_history.push(item);
|
|
});
|
|
return _history;
|
|
}
|
|
|
|
function parseHistoryToObject(history) {
|
|
var _history = {};
|
|
for (var i = 0, l = history.length; i < l; i++) {
|
|
var item = history[i];
|
|
_history[item.id] = item;
|
|
}
|
|
return _history;
|
|
}
|
|
|
|
module.exports = {
|
|
parseHistoryToArray: parseHistoryToArray,
|
|
parseHistoryToObject: parseHistoryToObject
|
|
}; |