UNPKG

cmstyx

Version:

Barebones Content Management System

350 lines (282 loc) 8.99 kB
var q = require('q'); var dbConnection = require('orchestrate'); //default database var db = null; exports.alive = true; exports.setup = function (config){ var defer = q.defer(); dbConnection.ApiEndPoint = config.location; db = dbConnection(config.key); db.ping() .then(function (res){ defer.resolve(db); }) .fail(function (err){ defer.reject(err); }); return defer.promise; } exports.delete = function (req, res, db){ var defer = q.defer(); var target = req.query.target; var element = req.query.element; db.search('web-elements', 'value.name: ' + target + ' AND value.stx_element: ' + element) .then(function (result){ var key = result.body.results[0].path.key; console.log("ST~ Removing element"); db.remove('web-elements', key) .then(function (message){ console.log(result.body.results[0].value); var count = result.body.count; console.log(count); if (count <= 1) { defer.resolve(result.body.results[0].value.stx_position); } else { defer.resolve("Element removed"); } }) .fail(function (error){ defer.reject(err); }); }) .fail(function (err){ console.log("STYX ERROR : " + target + " could not be found."); defer.reject(err); }); return defer.promise; } exports.add = function (data, db, key){ var defer = q.defer(); var customKey = key; if (key == 0) { db.post('web-elements', data) .then(function (){ defer.resolve(data.name); }) .fail(function (err){ defer.reject(err); }); } else { db.put('web-elements', customKey, data) .then(function (message){ defer.resolve(data.name); }) .fail(function (err){ defer.reject(err); }); } return defer.promise; } exports.compareRecords = function (req, res, db, key){ var defer = q.defer(); var newData = req.query; console.log(newData); console.log("SA~ Checking record to update"); var oldFileLocations = []; var compare = {}; db.get('web-elements', key) .then(function (result){ var oldData = result.body; var files = []; for (each in newData) { if (oldData[each] != newData[each] && newData[each] != "") { var split = each.split('_'); console.log(split); oldData[each] = newData[each]; } } compare = { "data" : oldData, "files" : files, "key" : key, "remove" : oldFileLocations } defer.resolve(compare); }) .fail(function (error){ defer.reject(error); }); return defer.promise; } exports.update = function (req, res, db, options){ var defer = q.defer(); console.log("ST~ Updating record"); db.put('web-elements', options.key, options.data) .then(function (message){ console.log("SA~ Record Updated"); defer.resolve(); }) .fail(function (err){ console.log(err); defer.resolve(); }); return defer.promise; } /* { projects:[], teams:[] } */ var ELEMENT = function (element){ var dictionary = { '_title' : 'stx_element', '_fresh' : 'stx_empty', '_props[]' : 'REMOVE THIS ELEMENT NOW', '_index' : 'stx_position', '_key' : 'stx_unique' }; this.packet = {}; for (each in element) { var prefix = each.split('')[0]; if (prefix == '_') { var newTitle = dictionary[each]; if (newTitle != "REMOVE THIS ELEMENT NOW") this.packet[newTitle] = element[each]; } else { this.packet[each] = element[each]; } } } exports.grab = function (db){ var defer = q.defer(); var data = {}; console.log("ST~ Getting styx elements"); db.search('web-elements', 'key: master') .then(function (res){ if (res.body.count == 0) { console.log("SA~ No elements in database"); defer.resolve(0); } else { var elements = res.body.results[0].value.collection; var eleCount = elements.length; var c = 1; console.log("ST~ Grabbing elements " + elements); for (each in elements) { var query = elements[each]; var freshRun = false; db.search('web-elements', 'value.stx_element: ' + query) .then(function (result){ var holder = []; var count = result.body.count; if (count == 0 && !freshRun) { freshRun = true; var master = res.body.results[0].value; delete master.collection; for (index in master) { if (master[index]._fresh) { master[index]._index = index; var elementTitle = master[index]._title; var newElement = new ELEMENT(master[index]); data[elementTitle] = newElement.packet; } } } else { var ele = result.body.results; var elementTitle = result.body.results[0].value.stx_element; var reference = result.body.results; var holder = []; var i = 0; while (i < count) { ele[i].value.stx_empty = false; ele[i].value.stx_unique = reference[i].path.key; holder.push(ele[i].value); i++; } data[elementTitle] = holder; } if (c == eleCount) defer.resolve(data); c++ }) .fail(function (err){ console.log("SE~ element search failed for " + query); defer.reject(err); }); } } }) .fail(function (err){ console.log("SE~ Error finding master object"); defer.reject(err); }); return defer.promise; } exports.search = function (qy, col, db){ console.log('pong') var defer = q.defer(); console.log("STYX ACTION: Searching " + col + " for: " + qy); db.search(col, qy) .then(function (result){ defer.resolve(result); }) .fail(function (err){ console.log("STYX ERROR: Search failed"); defer.reject(err); }); return defer.promise; } exports.find = function (key, col, db){ var defer = q.defer(); console.log("STYX ACTION: Getting " + key + " in " + col); db.get(col, key) .then(function (res){ defer.resolve(res); }) .fail(function (err){ console.log(err.body); console.log("SE~ Could not find"); defer.reject(err); }); return defer.promise; } exports.defUpdate = function (key, data, db){ var defer = q.defer(); db.merge('web-elements', key, data) .then(function (res){ defer.resolve(res); }) .fail(function (err){ defer.reject(err); }); return defer.promise; } exports.new = function (data, db){ var defer = q.defer(); db.post('web-elements', data) .then(function (res){ defer.resolve(res); }) .fail(function (err){ defer.reject(err); }); return defer.promise; } exports.set = function (key, col, path, val, db){ var defer = q.defer(); try{ db.newPatchBuilder(col, key) .replace(path, val) .apply() .then(function (res){ defer.resolve(res); }) .fail(function (err){ console.log(err); defer.reject(err); }); } catch (e) { console.log(e); } return defer.promise; } exports.qDel = function (key, db){ db.remove('web-elements', key) .then(function (report){ console.log("SA~ Record removed"); }) .fail(function (err){ console.log("SE~ Could not remove record"); }); } exports.burn = function (db){ db.deleteCollection('web-elements'); }