UNPKG

cloudboost-tv

Version:

Database Service that does Storage, Search, Real-time and a whole lot more.

337 lines (296 loc) 8.44 kB
import CB from './CB' /* CloudTable */ class CloudTable { constructor(tableName){ CB._tableValidation(tableName); this.document = {}; this.document.name = tableName; this.document.appId = CB.appId; this.document._type = 'table'; this.document.isEditableByClientKey = false if(tableName.toLowerCase() === "user") { this.document.type = "user"; this.document.maxCount = 1; } else if(tableName.toLowerCase() === "role") { this.document.type = "role"; this.document.maxCount = 1; } else if(tableName.toLowerCase() === "device") { this.document.type = "device"; this.document.maxCount = 1; } else { this.document.type = "custom"; this.document.maxCount = 9999; } this.document.columns = CB._defaultColumns(this.document.type); } addColumn(column){ if(Object.prototype.toString.call(column) === '[object String]') { var obj = new CB.Column(column); column = obj; } if (Object.prototype.toString.call(column) === '[object Object]') { if(CB._columnValidation(column, this)) this.document.columns.push(column); } else if (Object.prototype.toString.call(column) === '[object Array]') { for(var i=0; i<column.length; i++){ if(CB._columnValidation(column[i], this)) this.document.columns.push(column[i]); } } }; getColumn(columnName){ if(Object.prototype.toString.call(columnName) !== '[object String]') { throw "Should enter a columnName"; } var columns = this.document.columns; for(var i=0;i<columns.length;i++){ if(columns[i].name === columnName) return columns[i]; } throw "Column Does Not Exists"; }; updateColumn(column){ if (Object.prototype.toString.call(column) === '[object Object]') { if (CB._columnValidation(column, this)){ var columns = this.document.columns; for(var i=0;i<columns.length;i++){ if(columns[i].name === column.name){ columns[i] = column; this.document.columns = columns; break; } } }else{ throw "Invalid Column"; } }else{ throw "Invalid Column"; } }; deleteColumn(column){ if(Object.prototype.toString.call(column) === '[object String]') { var obj = new CB.Column(column); column = obj; } if (Object.prototype.toString.call(column) === '[object Object]') { if(CB._columnValidation(column, this)){ var arr = []; for(var i=0;i<this.columns.length;i++){ if(this.columns[i].name !== column.name) arr.push(this.columns[i]); } this.document.columns = arr; } } else if (Object.prototype.toString.call(column) === '[object Array]') { var arr = []; for(var i=0; i<column.length; i++){ if(CB._columnValidation(column[i], this)){ for(var i=0;i<this.columns.length;i++){ if(this.columns[i].name !== column[i].name) arr.push(this.columns[i]); } this.document.columns = arr; } } } }; /** * Deletes a table from database. * * @param table * @param callback * @returns {*} */ delete(callback){ CB._validate(); var def; if (!callback) { def = new CB.Promise(); } var params=JSON.stringify({ key: CB.appKey, name: this.name, method:"DELETE" }); var thisObj = this; var url = CB.apiUrl + '/app/' + CB.appId + "/" +this.name; CB._request('PUT',url,params,true).then(function(response){ if (callback) { callback.success(thisObj); } else { def.resolve(thisObj); } },function(err){ if(callback){ callback.error(err); }else { def.reject(err); } }); if (!callback) { return def.promise; } } /** * Saves a table * * @param callback * @returns {*} */ save(callback){ var def; if (!callback) { def = new CB.Promise(); } CB._validate(); var thisObj = this; var params=JSON.stringify({ key:CB.appKey, data:CB.toJSON(thisObj) }); var thisObj = this; var url = CB.apiUrl +'/app/' + CB.appId + "/" + thisObj.document.name; CB._request('PUT',url,params,true).then(function(response){ response = JSON.parse(response); thisObj = CB.fromJSON(response); if (callback) { callback.success(thisObj); } else { def.resolve(thisObj); } },function(err){ if(callback){ callback.error(err); }else { def.reject(err); } }); if (!callback) { return def.promise; } } } Object.defineProperty(CloudTable.prototype,'columns',{ get: function(){ return this.document.columns; } }); Object.defineProperty(CloudTable.prototype,'name',{ get: function(){ return this.document.name; }, set: function(){ throw "You can not rename a table"; } }); Object.defineProperty(CloudTable.prototype,'id',{ get: function(){ return this.document._id; } }); Object.defineProperty(CloudTable.prototype,'isEditableByClientKey',{ get: function(){ return this.document.isEditableByClientKey; }, set: function(isEditableByClientKey){ this.document.isEditableByClientKey = isEditableByClientKey; } }); CB.CloudTable = CloudTable /** * Gets All the Tables from an App * * @param callback * @returns {*} */ CB.CloudTable.getAll = function(callback){ if (!CB.appId) { throw "CB.appId is null."; } var def; if (!callback) { def = new CB.Promise(); } var params=JSON.stringify({ key: CB.appKey }); var url = CB.apiUrl+'/app/'+CB.appId +"/_getAll"; CB._request('POST',url,params,true).then(function(response){ response = JSON.parse(response); var obj = CB.fromJSON(response); if (callback) { callback.success(obj); } else { def.resolve(obj); } },function(err){ if(callback){ callback.error(err); }else { def.reject(err); } }); if (!callback) { return def.promise; } } /** * Gets a table * * @param table * It is the CloudTable object * @param callback * @returns {*} */ CB.CloudTable.get = function(table, callback){ if(Object.prototype.toString.call(table) === '[object String]') { var obj = new this(table); table = obj; } if (Object.prototype.toString.call(table) === '[object Object]') { { if (!CB.appId) { throw "CB.appId is null."; } var def; if (!callback) { def = new CB.Promise(); } var params=JSON.stringify({ key: CB.appKey, appId: CB.appId }); var url = CB.apiUrl + '/app/' + CB.appId + "/" + table.document.name; CB._request('POST',url,params,true).then(function(response){ if(response === "null" || response === ""){ obj = null; }else{ response = JSON.parse(response); var obj = CB.fromJSON(response); } if (callback) { callback.success(obj); } else { def.resolve(obj); } },function(err){ if(callback){ callback.error(err); }else { def.reject(err); } }); if (!callback) { return def.promise; } } } else if (Object.prototype.toString.call(table) === '[object Array]') { throw "cannot fetch array of tables"; } } export default CB.CloudTable