Asymmetrik/mean2-starter

View on GitHub
src/server/app/preferences/services/preference.server.service.js

Summary

Maintainability
C
7 hrs
Test Coverage
'use strict';

let path = require('path'),
    q = require('q'),
    deps = require(path.resolve('./src/server/dependencies.js')),
    util = deps.utilService,
    dbs = deps.dbs,
    Preference = dbs.admin.model('Preference');

function doSearch(query, sortParams, page, limit) {
    let countPromise = Preference.find(query).count();
    let searchPromise = Preference.find(query);

    if (sortParams) {
        searchPromise = searchPromise.sort(sortParams);
    }

    if (limit) {
        searchPromise = searchPromise.skip(page * limit).limit(limit);
    }

    return q.all([ countPromise, searchPromise ])
        .then((results) => {
            return q({
                totalSize: results[0],
                pageNumber: page,
                pageSize: limit,
                totalPages: Math.ceil(results[0] / limit),
                elements: results[1]
            });
        });
}

module.exports.searchAll = function(query) {
    return Preference.find(query).exec();
};

module.exports.search = function(query, queryParams) {
    let page = util.getPage(queryParams);
    let limit = util.getLimit(queryParams, 1000);

    let sort = queryParams.sort;
    let dir = queryParams.dir;

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

    let sortParams;
    if (sort) {
        sortParams = {};
        sortParams[sort] = dir === 'ASC' ? 1 : -1;
    }

    return doSearch(query, sortParams, page, limit);
};