Refactor db/update method

This commit is contained in:
simov
2014-09-05 14:45:27 +03:00
parent 722824ebe8
commit ce23c72cd2
+20 -35
View File
@@ -1,47 +1,32 @@
var async = require('async');
var qb = require('../qb');
exports.update = function (args, cb) {
switch (args.action) {
case 'insert':
case 'update':
var types = ['view', 'oneToOne', 'manyToOne'];
break;
case 'remove':
var types = ['oneToOne', 'manyToOne', 'view'];
break;
}
exports.update = function (args, done) {
var types = /insert|update/.test(args.action)
? ['view', 'oneToOne', 'manyToOne']
// remove
: ['oneToOne', 'manyToOne', 'view'];
(function loopTypes (k) {
if (k == types.length) return cb();
args.type = types[k];
args.tables = args.data[types[k]];
if (!args.tables) return loopTypes(++k);
var keys = Object.keys(args.tables);
async.eachSeries(types, function (type, done) {
args.type = type;
args.tables = args.data[type];
if (!args.tables) return done();
(function loopTables (i) {
if (i == keys.length) return loopTypes(++k);
var records = args.tables[keys[i]].records;
if (!records) return loopTables(++i);
async.eachSeries(Object.keys(args.tables), function (table, done) {
var records = args.tables[table].records;
if (!records) return done();
(function loopRecords (j) {
if (j == records.length) return loopTables(++i);
var record = records[j],
settings = args.settings[keys[i]];
async.eachSeries(records, function (record, done) {
var settings = args.settings[table];
tbl.inline(args, settings, record);
var data = tbl.query(args, settings, record);
tbl.execute(data.action, args, data.query, record, settings, function (err) {
if (err) return cb(err);
loopRecords(++j);
});
}(0));
}(0));
}(0));
var data = tbl.query(args, settings, record);
tbl.execute(data.action, args, data.query, record, settings, done);
}, done);
}, done);
}, done);
}