HEX
Server: nginx/1.24.0
System: Linux nowruzgan 6.8.0-57-generic #59-Ubuntu SMP PREEMPT_DYNAMIC Sat Mar 15 17:40:59 UTC 2025 x86_64
User: babak (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/dev/nowruzgan/rest/api/controllers/user/find.js
module.exports = {

  friendlyName: 'FindUser',

  description: 'List Users',

  inputs: {
    limit: {
      type: 'number',
      defaultsTo: 10
    },
    skip: {
      type: 'number',
      defaultsTo: 0
    },
    filter: {
      type: 'string',
      required: false
    },
    // role: {
    //   type: 'string',
    //   required: false
    // },
    sort: {
      type: 'string',
      defaultsTo: 'updatedAt DESC'
    },
  },

  exits: {
    forbidden: { statusCode: 403 },
    dbError: { statusCode: 500 },
  },

  getActions: () => ({'user.find': 'فهرست کاربران'}),

  fn: async function (inputs, exits) {
    let session = this.req.sessionData;
    let action = 'user.find';
    await sails.helpers.permit(action, session).intercept('reject', 'forbidden');
    sails.log.info({session, action, message: `listing users`});

    let critiria = {where: {}};
  
    // if(inputs.role) critiria.where.role = inputs.role;
    if(inputs.filter) critiria.where.or = [
      {firstName: {contains: inputs.filter}},
      {lastName: {contains: inputs.filter}},
    ];
    let sum = await User.count(JSON.parse(JSON.stringify(critiria)))
      .intercept(sails.log.interceptError(session, action, `on counting users`, 'dbError'));

    if(inputs.limit) critiria.limit = inputs.limit;
    if(inputs.skip) critiria.skip = inputs.skip;

    let list = await User
      .find(critiria)
      .populate('roles')
      .sort(inputs.sort)
      .intercept(sails.log.interceptError(session, action, `on listing users`, 'dbError'));

    return exits.success({
      sum: sum,
      list: list
    });
  }
};