teambot-club/teambot

View on GitHub
server/providers/data-provider.js

Summary

Maintainability
B
5 hrs
Test Coverage
var dbClient = require('mongodb').MongoClient,
    mongoUri = null;

var DataProvider = function() {

    function init(_mongoUri) {
        if (!mongoUri) {
            mongoUri = _mongoUri;
        } else {
            console.error('Data provider is already initialized');
        }

    }

    function connect(mongoUri, callback) {
        if (!mongoUri) {
            console.error('Data provider is NOT initialized');
        }
        dbClient.connect(mongoUri, callback);
    }

    function get(selector, collectionName, callback) {

        try {
            connect(mongoUri, function(err, db) {

                if (!db) {
                    console.log('Connection to ' + mongoUri + "can't be established!");
                    callback(err, null);
                    return;
                }

                var collection = db.collection(collectionName);

                collection.find(selector).toArray(function(err, docs) {
                    callback(err, docs);
                    db.close();
                });
            });
        } catch (err) {
            callback(err, null);
        }
    }

    function insert(document, collectionName, callback) {
        try {
            connect(mongoUri, function(err, db) {

                if (!db) {
                    console.log('Connection to ' + mongoUri + "can't be established!");
                    callback(err, null);
                    return;
                }

                var collection = db.collection(collectionName);

                var array = document;
                if (document && Object.prototype.toString.call(document) !== '[object Array]') {
                    array = [document];
                }

                collection.insertMany(array, function(err, result) {
                    callback(err, result);
                    db.close();
                });
            });
        } catch (err) {
            callback(err, null);
        }
    }

    function remove(selector, collectionName, callback) {
        try {

            connect(mongoUri, function(err, db) {

                if (!db) {
                    console.log('Connection to ' + mongoUri + "can't be established!");
                    callback(err, null);
                    return;
                }

                var collection = db.collection(collectionName);

                collection.deleteOne(selector, function(err, result) {
                    callback(err, result);
                    db.close();
                });
            });
        } catch (err) {
            callback(err, null);
        }
    }

    function update(selector, document, collectionName, callback) {
        try {
            connect(mongoUri, function(err, db) {

                if (!db) {
                    console.log('Connection to ' + mongoUri + "can't be established!");
                    callback(err, null);
                    return;
                }

                var collection = db.collection(collectionName);

                if (document._id) {
                    var ObjectId = require('mongodb').ObjectID;
                    document._id = ObjectId(document._id);
                }

                collection.updateOne(selector, {
                    $set: document
                }, {
                    upsert: true
                }, function(err, result) {
                    callback(err, result);
                });
            });
        } catch (err) {
            callback(err, null);
        }
    }

    return {
        init: init,
        get: get,
        insert: insert,
        remove: remove,
        update: update
    };
}();

module.exports = DataProvider;