Asymmetrik/mean2-starter

View on GitHub
src/server/app/access-checker/controllers/access-checker.server.controller.js

Summary

Maintainability
F
3 days
Test Coverage

'use strict';

var
    path = require('path'),

    deps = require(path.resolve('./src/server/dependencies.js')),
    dbs = deps.dbs,
    util = deps.utilService,
    logger = deps.logger,

    accessCheckerService = require(path.resolve('./src/server/app/access-checker/services/access-checker.server.service.js')),
    CacheEntry = dbs.admin.model('CacheEntry');


/**
 * Public methods
 */
module.exports.searchEntries = function(req, res) {

    // Handle the query/search/page
    var query = req.body.q;
    var search = req.body.s;

    var page = req.query.page;
    var size = req.query.size;
    var sort = req.query.sort;
    var dir = req.query.dir;

    // Limit has to be at least 1 and no more than 100
    if(null == size){ size = 20; }
    size = Math.max(1, Math.min(100, size));

    // Page needs to be positive and has no upper bound
    if(null == page){ page = 0; }
    page = Math.max(0, page);

    // Sort can be null, but if it's non-null, dir defaults to DESC
    if(null != sort && dir == null){ dir = 'DESC'; }

    // Create the variables to the search call
    var limit = size;
    var offset = page*size;
    var sortArr;
    if(null != sort){
        sortArr = [{ property: sort, direction: dir }];
    }

    CacheEntry.search(query, search, limit, offset, sortArr).then(function(result){

        // Create the return copy of the users
        var entries = [];
        result.results.forEach(function(element){
            entries.push(CacheEntry.fullCopy(element));
        });

        // success
        var toReturn = {
            totalSize: result.count,
            pageNumber: page,
            pageSize: size,
            totalPages: Math.ceil(result.count/size),
            elements: entries
        };

        // Serialize the response
        res.json(toReturn);
    }, function(error){
        // failure
        logger.error(error);
        return util.send400Error(res, error);
    });
};



// Match users given a search fragment
exports.matchEntries = function(req, res) {
    // Handle the query/search/page
    var query = req.body.q;
    var search = req.body.s;

    var page = req.query.page;
    var size = req.query.size;
    var sort = req.query.sort;
    var dir = req.query.dir;

    // Limit has to be at least 1 and no more than 100
    if(null == size){ size = 20; }
    size = Math.max(1, Math.min(100, size));

    // Page needs to be positive and has no upper bound
    if(null == page){ page = 0; }
    page = Math.max(0, page);

    // Sort can be null, but if it's non-null, dir defaults to DESC
    if(null != sort && dir == null){ dir = 'ASC'; }

    // Create the variables to the search call
    var limit = size;
    var offset = page*size;
    var sortArr;
    if(null != sort){
        sortArr = [{ property: sort, direction: dir }];
    }

    CacheEntry.containsQuery(query, ['key', 'valueString'], search, limit, offset, sortArr).then(function(result){

        // Create the return copy of the users
        var entries = [];
        result.results.forEach(function(element){
            entries.push(CacheEntry.fullCopy(element));
        });

        // success
        var toReturn = {
            totalSize: result.count,
            pageNumber: page,
            pageSize: size,
            totalPages: Math.ceil(result.count/size),
            elements: entries
        };

        // Serialize the response
        res.json(toReturn);
    }, function(error){
        // failure
        logger.error(error);
        return util.send400Error(res, error);
    });
};

exports.refreshEntry = function(req, res) {
    if(null == req.params.key) {
        util.handleErrorResponse(res, { status: 400, type: 'bad-request', message: 'Missing \'key\' request argument' });
    }
    else {
        accessCheckerService.refreshEntry(req.params.key).then(function() {
            res.status(204).end();
        }, function(error) {
            util.handleErrorResponse(res, { status: 500, type: 'error', message: error });
        });
    }
};

exports.deleteEntry = function(req, res) {
    if(null == req.params.key) {
        util.handleErrorResponse(res, { status: 400, type: 'bad-request', message: 'Missing \'key\' request argument' });
    }
    else {
        accessCheckerService.deleteEntry(req.params.key).then(function() {
            res.status(204).end();
        }, function(error) {
            util.handleErrorResponse(res, { status: 500, type: 'error', message: error });
        });
    }
};

exports.refreshCurrentUser = function(req, res) {
    var key = (null != req.user && null != req.user.providerData)? req.user.providerData.dnLower: undefined;
    accessCheckerService.refreshEntry(key).then(function() {
        res.status(204).end();
    }, function(error) {
        util.handleErrorResponse(res, { status: 500, type: 'error', message: error });
    });
};