Skip to content

Instantly share code, notes, and snippets.

@ahaneef29
Last active October 16, 2017 07:11
Show Gist options
  • Save ahaneef29/d3bad38a93be0ab9a9e5140cc62ea3fb to your computer and use it in GitHub Desktop.
Save ahaneef29/d3bad38a93be0ab9a9e5140cc62ea3fb to your computer and use it in GitHub Desktop.
.factory('appSettings', ['$q', function ($q) {
var settingService = {
debugMode: true,
dbName: "gwu_mobile_v1",
defaultUserId: "00000000-0000-0000-0000-000000000000",
googleGeoCodeApiUrl: 'http://maps.googleapis.com/maps/api/geocode/json?',
pageSize: 12,
numberOfRecordsPerRowPhone: 3,
pageSizeTablet: 15,
numberOfRecordsPerRowTablet: 5,
googleWebAppOauthClientId: '379198281295-lo39cp5oaakhe9s2oja0umfl9envb87u.apps.googleusercontent.com',
defaultFontSize: 4 //4,6,8 i.e low, medium, high
};
settingService.baseUrl = 'http://www.matjery.ae';
// settingService.baseUrl = 'http://10.10.10.154:10002';
settingService.apiURL = settingService.baseUrl + "/api/";
return settingService;
}])
.factory('dbStructure', function () {
var _appSettings = 'appSettings',
_topics = 'topics',
_localeStringResource = "localeStringResource",
_categories = "categories",
_slider = 'slider',
_vendors = 'vendors',
_products = 'products',
_constants = 'constants',
_campaigns = 'campaigns',
_customer = 'customer';
return {
schema: {
stores: [{
name: _appSettings,
keyPath: 'key'
},
{
name: _customer,
keyPath: 'id'
}, {
name: _constants,
keyPath: 'id',
indexes: [{
name: 'groupName',
keyPath: 'groupName'
}]
},
{
name: _localeStringResource,
keyPath: 'language',
indexes: [{
name: 'language',
keyPath: 'language'
}]
},
{
name: _topics,
keyPath: 'id',
indexes: [{
name: 'id',
keyPath: 'id'
}, {
name: 'systemName',
keyPath: 'systemName'
}]
},
{
name: _categories,
keyPath: 'type'
}, {
name: _vendors,
keyPath: 'id'
}, {
name: _campaigns,
keyPath: 'id'
}, {
name: _products,
keyPath: 'id',
autoIncrement: true,
indexes: [{
name: 'type',
keyPath: 'type'
}]
}, {
name: _slider,
autoIncrement: true,
keyPath: 'id'
}
]
},
tables: {
appSettings: _appSettings,
customer: _customer,
localeStringResource: _localeStringResource,
topics: _topics,
slider: _slider,
vendors: _vendors,
products: _products,
constants: _constants,
campaigns: _campaigns,
categories: _categories
},
ignoreList: {
//customer: ['accessToken', 'apiIV', 'apiKey', 'email', 'mobile', 'cardExpiryDate', 'dateOfBirth', 'displayName', 'mobileNumber', 'nationality', 'gender', 'udbNumber_int', 'idn', 'pran', 'fileNumber', 'issueDate', 'expiryDate']
}
};
})
.factory('dbService', ['appSettings', 'dbStructure', 'cryptoHelper', '$filter', function (appSettings, dbStructure, cryptoHelper, $filter) {
var options = {};
if (window.device && window.device.platform == "Android" && window.device.version.indexOf('4.2.') == 0) {
options = {
mechanisms: ['indexeddb', 'websql', 'localstorage']
};
}
var _db = new ydn.db.Storage(appSettings.dbName, dbStructure.schema, options),
_put = function (storeName, opts) {
var data = opts['value'];
if (opts['ignoreList']) {
// encrypt the object before inserting
data = cryptoHelper.encrypt(opts['value'], opts['ignoreList']);
}
if (opts['key']) {
return _db.put(storeName, data, opts['key']).done(opts['callback']);
} else {
return _db.put(storeName, data).done(opts['callback']);
}
},
_get = function (storeName, key, opts) {
if (opts['ignoreList']) {
_db.get(storeName, key).done(function (result) {
var callback = opts['callback'];
if (callback) {
// decrypt the object before returning
callback(result ? cryptoHelper.decrypt(result, opts['ignoreList']) : null);
}
});
} else {
_db.get(storeName, key).done(opts['callback']);
}
},
_getDynamic = function (storeName, opts) {
var q;
if (opts['field']) {
q = _db.from(storeName).where(opts['field'], opts['operator'], opts['value']);
} else {
q = _db.from(storeName);
}
if (opts['top']) {
q.list(opts['top']).done(function (result) {
if (opts['callback']) {
opts['callback'](opts['ignoreList'] ? cryptoHelper.decryptList(result, opts['ignoreList']) : result);
}
});
} else {
q.list().done(function (result) {
if (opts['callback']) {
opts['callback'](opts['ignoreList'] ? cryptoHelper.decryptList(result, opts['ignoreList']) : result);
}
});
}
},
_remove = function (storeName, key, callback) {
return _db.remove(storeName, key).done(callback);
},
_removeAll = function (storeName, callback) {
return _db.clear(storeName).done(callback);
},
_count = function (storeName, opts) {
if (opts['key']) {
_db.count(storeName, ydn.db.KeyRange.only(opts['key'])).done(opts['callback']);
} else {
_db.count(storeName).done(opts['callback']);
}
};
return {
put: _put,
get: _get,
getDynamic: _getDynamic,
remove: _remove,
log: function (msg) {
if (appSettings.debugMode) {
//console..log(msg);
}
},
appSettings: {
put: function (setting, callback) {
_put(dbStructure.tables.appSettings, {
value: setting,
callback: callback
});
},
load: function (key, callback) {
_get(dbStructure.tables.appSettings, key, {
callback: callback
});
},
remove: function (key, callback) {
return _remove(dbStructure.tables.appSettings, key, callback);
}
},
customer: {
ignoreList: dbStructure.ignoreList.customer,
put: function (obj, callback) {
return _put(dbStructure.tables.customer, {
value: obj,
ignoreList: this.ignoreList,
callback: callback
});
},
load: function (key, callback) {
_get(dbStructure.tables.customer, key, {
ignoreList: this.ignoreList,
callback: callback
});
},
loadDynamic: function (callback) {
_getDynamic(dbStructure.tables.customer, {
ignoreList: this.ignoreList,
callback: callback
});
},
remove: function (key, callback) {
_remove(dbStructure.tables.customer, key, callback);
}
},
localeStringResource: {
put: function (obj, callback) {
_put(dbStructure.tables.localeStringResource, {
value: obj,
callback: callback
});
},
count: function (callback) {
_count(dbStructure.tables.localeStringResource, {
callback: callback
});
},
load: function (key, callback) {
_get(dbStructure.tables.localeStringResource, key, {
callback: callback
});
},
removeAll: function (callback) {
_removeAll(dbStructure.tables.localeStringResource, callback);
}
},
categories: {
put: function (obj, callback) {
return _put(dbStructure.tables.categories, {
value: obj,
callback: callback
});
},
count: function (callback) {
_count(dbStructure.tables.categories, {
callback: callback
});
},
load: function (key, callback) {
_get(dbStructure.tables.categories, key, {
callback: callback
});
},
removeAll: function (callback) {
_removeAll(dbStructure.tables.categories, callback);
}
},
products: {
put: function (obj, callback) {
_put(dbStructure.tables.products, {
value: obj,
callback: callback
});
},
count: function (callback) {
_count(dbStructure.tables.products, {
callback: callback
});
},
loadDynamic: function (key, callback) {
_getDynamic(dbStructure.tables.products, {
top: '1',
field: 'type',
operator: '=',
value: key,
callback: callback
});
},
load: function (key, callback) {
_get(dbStructure.tables.products, key, {
callback: callback
});
},
removeAll: function (callback) {
return _removeAll(dbStructure.tables.products, callback);
}
},
topics: {
put: function (obj, callback) {
_put(dbStructure.tables.topics, {
value: obj,
callback: callback
});
},
count: function (callback) {
_count(dbStructure.tables.topics, {
callback: callback
});
},
load: function (key, callback) {
_get(dbStructure.tables.topics, key, {
callback: callback
});
},
loadBySystemName: function (key, callback) {
_getDynamic(dbStructure.tables.topics, {
field: 'systemName',
operator: '=',
value: key,
callback: callback
});
},
removeAll: function (callback) {
_removeAll(dbStructure.tables.topics, callback);
}
},
campaigns: {
put: function (obj, callback) {
_put(dbStructure.tables.campaigns, {
value: obj,
callback: callback
});
},
count: function (callback) {
_count(dbStructure.tables.campaigns, {
callback: callback
});
},
load: function (key, callback) {
_get(dbStructure.tables.campaigns, key, {
callback: callback
});
},
loadAll: function (callback) {
_db.from(dbStructure.tables.campaigns).list()
.done(function (results) {
callback(results);
});
},
removeAll: function (callback) {
_removeAll(dbStructure.tables.campaigns, callback);
}
},
constants: {
put: function (obj, callback) {
_put(dbStructure.tables.constants, {
value: obj,
callback: callback
});
},
count: function (callback) {
_count(dbStructure.tables.constants, {
callback: callback
});
},
//load: function (key, callback) {
// _get(dbStructure.tables.constants, key, {
// callback: callback
// });
//},
load: function (opt) {
if (opt['filters'] && opt['filters'].key && opt['filters'].value) {
var key_range = ydn.db.KeyRange.only(opt['filters'].value);
_db.values(new ydn.db.IndexValueIterator(dbStructure.tables.constants, opt['filters'].key, key_range)).done(opt['callback']);
} else {
// added limit value of 5000 because YDN-DB default is 100
_db.values(dbStructure.tables.constants, null, 5000).always(opt['callback']);
}
},
loadAll: function (callback) {
//by default returns 100 per api
_db.from(dbStructure.tables.constants).list(5000)
.done(function (results) {
callback(results);
});
},
removeAll: function (callback) {
_removeAll(dbStructure.tables.constants, callback);
}
},
slider: {
put: function (obj, callback) {
_put(dbStructure.tables.slider, {
value: obj,
callback: callback
});
},
loadAll: function (callback) {
_db.from(dbStructure.tables.slider).list()
.done(function (results) {
callback(results);
});
},
removeAll: function (callback) {
_removeAll(dbStructure.tables.slider, callback);
}
},
vendors: {
put: function (obj, callback) {
_put(dbStructure.tables.vendors, {
value: obj,
callback: callback
});
},
load: function (key, callback) {
_get(dbStructure.tables.vendors, key, {
callback: callback
});
},
loadByPagingMerchants: function (pageIndex, pageSize, callback) {
//v.registerationTypeId === 1 || v.registerationTypeId === 0;
var key_range = ydn.db.KeyRange.bound(0, 1)
return _db.values(dbStructure.tables.vendors, 'registerationTypeId', key_range, pageSize, pageIndex)
.then(function (record) {
if (callback) {
callback(record);
}
});
},
loadByPagingFoundations: function (pageIndex, pageSize, callback) {
//v.registerationTypeId === 1 || v.registerationTypeId === 0;
var key_range = ydn.db.KeyRange.only(2)
return _db.values(dbStructure.tables.vendors, 'registerationTypeId', key_range, pageSize, pageIndex)
.then(function (record) {
if (callback) {
callback(record);
}
});
},
countMerchants: function (callback) {
//v.registerationTypeId === 1 || v.registerationTypeId === 0;
var key_range = ydn.db.KeyRange.bound(1)
_db.count(dbStructure.tables.vendors, key_range)
.done(callback);
},
countFoundations: function (callback) {
var key_range = ydn.db.KeyRange.only(2)
_db.count(dbStructure.tables.vendors, key_range)
.done(callback);
},
loadAll: function (callback) {
_db.from(dbStructure.tables.vendors).list(10000)
.done(function (results) {
callback(results);
});
},
removeAll: function (callback) {
return _removeAll(dbStructure.tables.vendors, callback);
},
remove: function (key, callback) {
return _remove(dbStructure.tables.vendors, key).done(callback);
}
}
};
}])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment