Files
trunk-server/backend/controllers/sources.js
Luke Berndt 3b0d3f290f First Commit
2020-06-09 22:11:11 -04:00

147 lines
4.4 KiB
JavaScript

var sources = {};
var pendingSources = {};
var mongo = require('mongodb');
var ObjectID = require('mongodb').ObjectID;
mongo.BSONPure = require('bson').BSONPure;
var BSON = mongo.BSONPure;
function getPendingSources(shortName, callback) {
var sources = [];
var count = 0;
db.get().collection('pending_sources', function(err, collection) {
collection.find({
'shortName': shortName
}).count(function(err, total) {
var cursor = collection.find({
'shortName': shortName
});
cursor.each(function(err, item) {
if (item != null) {
var sourceColl = db.collection('source_names');
sourceColl.find({
'sourceId': item.sourceId,
'shortName': shortName
}).toArray(function(err, existingSources) {
var source = {
objectId: item._id.toHexString(),
sourceId: item.sourceId,
name: item.name,
codeName: item.codeName,
callId: item.callId,
time: item.time,
existingSources: existingSources
};
sources.push(source);
count++;
if (count == total) {
callback(sources);
}
});
}
});
});
});
};
function insertPendingSource(shortName, sourceItem, res) {
db.get().collection('pending_sources', function(err, sourceNameCollection) {
sourceNameCollection.insert(sourceItem, function(err, result) {
if (err) {
console.warn(err.message);
res.status(404);
res.send({
error: err
});
return;
}
getPendingSources(shortName, function(sources) {
console.log("sending: " + util.inspect(sources));
res.send(JSON.stringify({
sources: sources,
source: sourceItem,
result: result.result
}));
});
});
});
};
function updatePendingSource(shortName, sourceItem, filter, res) {
db.get().collection('pending_sources', function(err, sourceNameCollection) {
sourceNameCollection.updateOne(filter, sourceItem, {
upsert: true
}, function(err, result) {
if (err) {
console.warn(err.message);
res.status(404);
res.send({
error: err
});
return;
}
getPendingSources(shortName, function(sources) {
res.send(JSON.stringify({
sources: sources,
source: sourceItem,
result: result.result
}));
});
});
});
};
app.post('/:shortName/pending_sources', function(req, res) {
res.contentType('json');
res.setHeader('Access-Control-Allow-Origin', '*');
if (req.body) {
var sourceId = req.body.sourceId;
if (!isNaN(sourceId) && (sourceId > 0)) {
var filter = {};
var name = req.body.name;
var codeName = req.body.codeName;
var call = req.body.call;
var time = new Date();
if (name) {
name = name.replace(/[^\w\s]/gi, '');
}
if (codeName) {
codeName = codeName.replace(/[^\w]/gi, '');
}
var sourceItem = {
sourceId: sourceId,
name: name,
codeName: codeName,
time: time
};
if (call) {
sourceItem.call = new BSON.ObjectID(call);
}
if (name && codeName) {
if (req.body.objectId) {
filter._id = ObjectID.createFromHexString(req.body.objectId);
updatePendingSource(req.params.shortName.toLowerCase(), sourceItem, filter, res);
} else {
insertPendingSource(req.params.shortName.toLowerCase(), sourceItem, res);
}
}
}
}
});