Source: lib/plugins/utils.js

"use strict";

var _ = require('lodash');

module.exports = exports = function getAll(schema,options){

  /**
   * Получить все записи
   *
   * @param {number} opts.limit - rows limit, default 1000
   * @param {object} opts.sort - sorting, default { name: -1 }
   * @param {object} opts.filter - filter, default {}
   * @param {number} opts.skip - skip records, default 0
   *
   * @function getAll
   * @memberOf Thing
   * @static
   */
  schema.statics.getAll = function(opts){

    var self = this;
    var collectionName = self.collection.name;

    return function(req,res,next) {

      var defaults = {
        limit: req.param('limit') || 1000,
        sort: req.param('sort') || { name: 1 },
        filter: req.param('filter') || {},
        skip: req.param('skip') || 0
      };

      _.merge(defaults,opts);

      self
        .find(defaults.filter)
        .skip(defaults.skip)
        .limit(defaults.limit)
        .sort(defaults.sort)
        .exec(function(err, results){

          if(err) return next({
            statusCode: 500,
            message: res.__('ERROR_DATABASE_FATAL')
          });

          /**
           * Get total counts
           */
          self.count(defaults.filter,function(e,c){

            if(err) return next({
              statusCode: 500,
              message: res.__('ERROR_DATABASE_FATAL')
            });

            req[collectionName] = results;
            res.locals[collectionName] = results || [];
            res.locals[collectionName].count = c;

            next();

          });

        });
    }
  };

  /**
   *
   * @param {Object} opts
   * @function removeAll
   * @memberOf Thing
   * @static
   *
   */
  schema.statics.removeAll = function(opts){

    var self = this;
    var collectionName = self.collection.name;

    return function(req,res,next){

      var defaults = {
        filter: req.param('filter') || {}
      };

      _.merge(defaults,opts);

      self
        .remove(defaults.filter)
        .exec(function(err,results){

          if(err) return next({
            statusCode: 500,
            message: res.__('ERROR_DATABASE_FATAL')
          });

          res.locals[collectionName] = [];
          next();

        });

    };
  };

};