Skip to content

Instantly share code, notes, and snippets.

@jgoux
Created April 15, 2014 14:53
Show Gist options
  • Save jgoux/10738978 to your computer and use it in GitHub Desktop.
Save jgoux/10738978 to your computer and use it in GitHub Desktop.

Revisions

  1. jgoux created this gist Apr 15, 2014.
    4 changes: 4 additions & 0 deletions app.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,4 @@
    angular.module('myApp', ['ionic', 'myApp.services', 'myApp.controllers'])
    .run(function(DB) {
    DB.init();
    });
    18 changes: 18 additions & 0 deletions config.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,18 @@
    angular.module('myApp.config', [])
    .constant('DB_CONFIG', {
    name: 'DB',
    tables: [
    {
    name: 'documents',
    columns: [
    {name: 'id', type: 'integer primary key'},
    {name: 'title', type: 'text'},
    {name: 'keywords', type: 'text'},
    {name: 'version', type: 'integer'},
    {name: 'release_date', type: 'text'},
    {name: 'filename', type: 'text'},
    {name: 'context', type: 'text'}
    ]
    }
    ]
    });
    13 changes: 13 additions & 0 deletions controllers.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,13 @@
    angular.module('myApp.controllers', ['myApp.services'])
    .controller('DocumentCtrl', function($scope, Document) {
    $scope.documents = [];
    $scope.document = null;
    // Get all the documents
    Document.all().then(function(documents){
    $scope.documents = documents;
    });
    // Get one document, example with id = 2
    Document.getById(2).then(function(document) {
    $scope.document = document;
    });
    });
    74 changes: 74 additions & 0 deletions services.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,74 @@
    angular.module('myApp.services', ['myApp.config'])
    // DB wrapper
    .factory('DB', function($q, DB_CONFIG) {
    var self = this;
    self.db = null;

    self.init = function() {
    // Use self.db = window.sqlitePlugin.openDatabase({name: DB_CONFIG.name}); in production
    self.db = window.openDatabase(DB_CONFIG.name, '1.0', 'database', -1);

    angular.forEach(DB_CONFIG.tables, function(table) {
    var columns = [];

    angular.forEach(table.columns, function(column) {
    columns.push(column.name + ' ' + column.type);
    });

    var query = 'CREATE TABLE IF NOT EXISTS ' + table.name + ' (' + columns.join(',') + ')';
    self.query(query);
    console.log('Table ' + table.name + ' initialized');
    });
    };

    self.query = function(query, bindings) {
    bindings = typeof bindings !== 'undefined' ? bindings : [];
    var deferred = $q.defer();

    self.db.transaction(function(transaction) {
    transaction.executeSql(query, bindings, function(transaction, result) {
    deferred.resolve(result);
    }, function(transaction, error) {
    deferred.reject(error);
    });
    });

    return deferred.promise;
    };

    self.fetchAll = function(result) {
    var output = [];

    for (var i = 0; i < result.rows.length; i++) {
    output.push(result.rows.item(i));
    }

    return output;
    };

    self.fetch = function(result) {
    return result.rows.item(0);
    };

    return self;
    })
    // Resource service example
    .factory('Document', function(DB) {
    var self = this;

    self.all = function() {
    return DB.query('SELECT * FROM documents')
    .then(function(result){
    return DB.fetchAll(result);
    });
    };

    self.getById = function(id) {
    return DB.query('SELECT * FROM documents WHERE id = ?', [id])
    .then(function(result){
    return DB.fetch(result);
    });
    };

    return self;
    });