Advertisement
Guest User

Untitled

a guest
Feb 6th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.46 KB | None | 0 0
  1. angular.module("starter").factory("assetsRepository", function ($q, entity) {
  2.  
  3. var _getDB = function () {
  4. return openDatabase("my.db", '1.0', 'description', 2* 1024 * 1024);
  5. };
  6. var _deleteTable = function () {
  7. _getDB().transaction(function (tx) {
  8. tx.executeSql("DROP TABLE IF EXISTS assets");
  9. });
  10. };
  11. var _createTable = function () {
  12. _getDB().transaction(function (tx) {
  13. console.log('Creating ...');
  14. tx.executeSql("CREATE TABLE IF NOT EXISTS assets (" +
  15. "id INTEGER PRIMARY KEY AUTOINCREMENT," +
  16. "fcbm text," +
  17. "description text," +
  18. "date text," +
  19. "value text," +
  20. "local text," +
  21. "status text," +
  22. "state text," +
  23. "note text," +
  24. "requestBoard integer," +
  25. "boardType text," +
  26. "updatedAt text," +
  27. "editedLocal text," +
  28. "editedDescription text," +
  29. "createdAt text," +
  30. "quantity integer," +
  31. "imageURI text," +
  32. "generatedFCBM text," +
  33. "validatedAt text)");
  34. });
  35. };
  36.  
  37. var _select = function (callback, query, params) {
  38.  
  39. if (typeof query !== 'string') {
  40. throw new TypeError('String was expected');
  41. }
  42.  
  43. params = params || [];
  44.  
  45. if (!Array.isArray(params)) {
  46. throw new TypeError('Array was expected');
  47. }
  48.  
  49. var defer = $q.defer();
  50.  
  51. _getDB().transaction(function (tx) {
  52. tx.executeSql(query,params, function (tx, res) {
  53.  
  54. defer.resolve(callback(res));
  55.  
  56. }, function (error) {
  57. defer.reject(error);
  58. });
  59. }, function (error) {
  60. defer.reject(error);
  61. });
  62.  
  63. return defer.promise;
  64. };
  65.  
  66. var _iterator = function (res) {
  67. var rows = [];
  68.  
  69. if (res.rows.length > 0) {
  70. for(var i =0; i< res.rows.length; i++) {
  71. rows.push(res.rows[i]);
  72. }
  73. }
  74. return rows;
  75.  
  76. };
  77.  
  78. var _findAll = function () {
  79. var query = 'SELECT * FROM assets';
  80.  
  81. return _select(function (res) {
  82. return _iterator(res);
  83. }, query);
  84. };
  85.  
  86. var _buildInsertQuery = function (asset) {
  87. var fields = Object.keys(asset).join(',');
  88. var placeholders = '?,'.repeat(Object.keys(asset).length).slice(0,-1);
  89. return query = 'INSERT INTO assets (' + fields + ') VALUES (' + placeholders + ')';
  90. };
  91.  
  92. var _insert = function (asset) {
  93. var query = _buildInsertQuery(asset);
  94. var params = _objectToArray(asset);
  95.  
  96. return _getDB().transaction(function (tx) {
  97. return tx.executeSql(query, params);
  98. });
  99. };
  100.  
  101. var _bulkInsert = function (assets) {
  102. if (!Array.isArray(assets)) {
  103. throw new TypeError('Array was expected');
  104. }
  105. var deferred = $q.defer();
  106.  
  107. _getDB().transaction(function (tx) {
  108. assets.forEach(function (elem) {
  109. if (!elem instanceof entity.Good) {
  110. throw new TypeError('Object was expected');
  111. }
  112.  
  113. tx.executeSql(_buildInsertQuery(elem), _objectToArray(elem), function (tx, res) {
  114. deferred.resolve(res);
  115. }, function (error) {
  116. deferred.reject(error);
  117. });
  118.  
  119. });
  120. }, function (error) {
  121. deferred.reject(error);
  122. });
  123.  
  124. return deferred.promise;
  125. };
  126.  
  127. var _fetchByLocal = function (location) {
  128. var query = 'SELECT * FROM assets WHERE local = ?';
  129. return _select(function (res) {
  130. return _iterator(res);
  131. }, query, [location]);
  132. };
  133.  
  134. var _fetchByFcbm = function (fcbm) {
  135. var query = "SELECT * FROM assets WHERE fcbm = ?";
  136.  
  137. return _select(function (res) {
  138. return _iterator(res)[0];
  139. }, query, [fcbm]);
  140. };
  141.  
  142. var _fetchNotFound = function () {
  143. var query = "SELECT * FROM assets WHERE status is null";
  144. return _select(function (res) {
  145. return _iterator(res);
  146. }, query);
  147. };
  148.  
  149. var _fetchDifferentLocation = function () {
  150. var query = "SELECT * FROM assets WHERE editedLocal is not null and editedLocal <> local";
  151. return _select(function (res) {
  152. return _iterator(res);
  153. }, query);
  154. };
  155.  
  156. var _fetchUnusedCondition = function () {
  157. var query = "SELECT * FROM assets WHERE state = 'SEM CONDIÇÃO DE USO'";
  158. return _select(function (res) {
  159. return _iterator(res);
  160. }, query);
  161. };
  162.  
  163. var _fetchRequestedBoard = function () {
  164. var query = "SELECT * FROM assets WHERE requestBoard == true";
  165. return _select(function (res) {
  166. return _iterator(res);
  167. }, query);
  168. };
  169.  
  170. var _fetchCreated = function () {
  171. var query = "SELECT * FROM assets WHERE status = 'Criado'";
  172. return _select(function (res) {
  173. return _iterator(res);
  174. }, query);
  175. };
  176.  
  177. var _fetchLocations = function () {
  178. var query = 'SELECT DISTINCT local FROM assets';
  179.  
  180. return _select(function (res) {
  181. var result = _iterator(res);
  182.  
  183. return result.map(function (elem) {
  184. return elem.local;
  185. });
  186.  
  187. }, query);
  188. };
  189.  
  190. var _countLoaded = function () {
  191. var query = "SELECT COUNT(id) as count FROM assets WHERE status != 'Criado' OR status is null";
  192.  
  193. return _select(function(res) {
  194. return $q.when(res.rows[0].count);
  195. }, query);
  196. };
  197.  
  198. var _countEdited = function () {
  199. var query = "SELECT COUNT(id) as count FROM assets WHERE status = 'Editado'";
  200. return _select(function (res) {
  201. return res.rows[0].count
  202. }, query);
  203. };
  204.  
  205. var _countCreated = function () {
  206. var query = "SELECT COUNT(id) as count FROM assets WHERE status = 'Criado'";
  207. return _select(function (res) {
  208. return res.rows[0].count;
  209. }, query);
  210. };
  211.  
  212. var _countValidated = function () {
  213. var query = "SELECT COUNT(id) as count FROM assets WHERE status = 'Validado'";
  214.  
  215. return _select(function (res) {
  216. return res.rows[0].count
  217. }, query);
  218. };
  219.  
  220. var _countPristine = function () {
  221. var query = "SELECT COUNT(id) as count FROM assets WHERE status is null";
  222. return _select(function (res) {
  223. return res.rows[0].count;
  224. }, query);
  225. };
  226.  
  227. var _countCreatedNoBoard = function () {
  228. var query = "SELECT COUNT(id) as count FROM assets WHERE status = 'Criado' AND generatedFCBM = false";
  229. return _select(function (res) {
  230. return res.rows[0].count;
  231. }, query);
  232. };
  233.  
  234. var _countCreatedWithBoard = function () {
  235. var query = "SELECT count(id) as count FROM assets WHERE status = 'Criado' AND generatedFCBM false";
  236.  
  237. return _select(function (res) {
  238. return res.rows[0].count;
  239. }, query);
  240. };
  241.  
  242. var _delete = function (fcbm) {
  243. var deferred = $q.defer();
  244. var query = "DELETE FROM assets WHERE fcbm = ?";
  245. _getDB().transaction(function (tx) {
  246. tx.executeSql(query, [fcbm], function (tx, res) {
  247. deferred.resolve(res);
  248. }, function (error) {
  249. deferred.reject(error);
  250. });
  251. }, function (error) {
  252. deferred.reject(error);
  253. });
  254.  
  255. return deferred.promise;
  256. }
  257.  
  258. var _objectToArray = function (obj) {
  259. return Object.keys(obj).map(function (key) {
  260. return obj[key];
  261. });
  262. };
  263.  
  264. var _update = function (asset, fcbm) {
  265. if (!asset instanceof Object) {
  266. throw new TypeError('Object was expected in param asset');
  267. }
  268.  
  269. if (typeof fcbm !== 'string') {
  270. throw new TypeError('String was expected in param fcbm');
  271. }
  272.  
  273. var params =_objectToArray(asset);
  274. params.push(fcbm);
  275.  
  276. var query = 'UPDATE assets SET ';
  277. Object.keys(asset).forEach(function (field) {
  278. query += field + ' = ?,';
  279. });
  280.  
  281. query = query.slice(0,-1);
  282. query += ' WHERE fcbm = ?';
  283.  
  284. var deferred = $q.defer();
  285.  
  286. _getDB().transaction(function (tx) {
  287. tx.executeSql(query, params, function (tx, res) {
  288. deferred.resolve(res);
  289. }, function (error) {
  290. deferred.reject(error);
  291. });
  292. }, function (error) {
  293. deferred.reject(error);
  294. });
  295.  
  296. deferred.promise;
  297. };
  298.  
  299. return {
  300. createTable: _createTable,
  301. deleteTable: _deleteTable,
  302. findAll: _findAll,
  303. insert: _insert,
  304. bulkInsert: _bulkInsert,
  305. fetchByLocal: _fetchByLocal,
  306. fetchByFcbm: _fetchByFcbm,
  307. fetchNotFound: _fetchNotFound,
  308. fetchDifferentLocation: _fetchDifferentLocation,
  309. fetchUnusedCondition: _fetchUnusedCondition,
  310. fetchRequestedBoard: _fetchRequestedBoard,
  311. fetchCreated: _fetchCreated,
  312. fetchLocations: _fetchLocations,
  313. countLoaded: _countLoaded,
  314. countEdited: _countEdited,
  315. countCreated: _countCreated,
  316. countValidated: _countValidated,
  317. countPristine: _countPristine,
  318. countCreatedNoBoard: _countCreatedNoBoard,
  319. countCreatedWithBoard: _countCreatedWithBoard,
  320. delete: _delete,
  321. update: _update
  322. };
  323. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement