lcars-library-node
Version:
NodeJS module for creating a library for the LCARS dashboard system
136 lines (122 loc) • 3.64 kB
JavaScript
/**
*
* @module Elements
* @main
*/
var Modification = this.Modification = require("./modification");
var Element = this.Element = require("./element");
var Event = this.Event = require("./event");
var Edge = this.Edge = require("./edge");
var Page = this.Page = require("./page");
var active = {};
this.element = {};
this.edge = {};
this.element.retrieve = function(session, description) {
return eRetrieve(Element, session, description);
};
this.element.write = function(session, description) {
return eWrite(Element, session, description);
};
this.element.drop = function(session, description) {
return eDrop(Element, session, description);
};
this.edge.retrieve = function(session, description) {
return eRetrieve(Edge, session, description);
};
this.edge.write = function(session, description) {
return eWrite(Edge, session, description);
};
this.edge.drop = function(session, description) {
return eDrop(Edge, session, description);
};
var eRetrieve = function(Constructor, session, description) {
return new Promise(function(done, fail) {
if(description.id) {
if(active[description.id]) {
done(active[description.id]);
} else {
Constructor.model.findOne({"id":description.id})
.then(function(element) {
done(element);
})
.catch(fail);
}
} else {
fail(new Error("No ID present"));
}
});
};
var eWrite = function(Constructor, session, description) {
return new Promise(function(done, fail) {
var previous, resultant;
if(description.id) {
if(active[description.id]) {
previous = JSON.stringify(active[description.id]);
Object.assign(active[description.id], description);
resultant = JSON.stringify(active[description.id]);
active[description.id].save()
.then(function() {
done(active[description.id]);
var mod = new Modification(session, previous, resultant);
mod.save()
.catch(function(err) {
console.log("Failed to save modification: " + err.message, err.stack);
});
})
.catch(fail);
} else {
Constructor.model.findOne({"id":description.id})
.then(function(model) {
if(model) {
previous = JSON.stringify(model);
Object.assign(model, description);
resultant = JSON.stringify(model);
model.save()
.then(function() {
done(model);
var mod = new Modification(session, previous, resultant);
mod.save()
.catch(function(err) {
console.log("Failed to save modification: " + err.message, err.stack);
});
})
.catch(fail);
} else {
fail(new Error("Element not found"));
}
})
.catch(fail);
}
} else {
var model = new Constructor(session, description);
model.save()
.then(function() {
previous = null;
resultant = JSON.stringify(model);
done(model);
var mod = new Modification(session, previous, resultant);
mod.save()
.catch(function(err) {
console.log("Failed to save modification: " + err.message, err.stack);
});
})
.catch(fail);
}
});
};
var eDrop = function(Constructor, session, description) {
return new Promise(function(done, fail) {
var previous;
Constructor.model.remove({"id":description.id})
.then(function(model) {
previous = JSON.stringify(model);
done(model);
var mod = new Modification(session, previous);
mod.save()
.catch(function(err) {
console.log("Failed to save modification: " + err.message, err.stack);
});
})
.catch(fail);
});
};