All files / common/models person.js

12.12% Statements 4/33
0% Branches 0/4
11.11% Functions 1/9
13.79% Lines 4/29

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105    1x   1x 1x                                                                                                                                                         1x                                            
'use strict';
 
const logger = require('../../services/logger');
 
module.exports = function(Person) {
  Person.findPersonsByOrganization = async (accessToken, organizationId) => {
    try {
      const roleMap = await Person.app.models.RoleMapping.find({
        where: {
          principalId: accessToken.userId
        }
      });
 
      const roles = roleMap.map(roleMapping => roleMapping.roleId);
 
      // User has role Admin (1)
      if (roles.includes(1)) {
 
        const sites = await Person.app.models.site.find({
          where: {
            OrganizationId: organizationId
          }
        });
        const siteIds = sites.map(site => site.id);
        const resources = await Person.app.models.resource.find({
          where: {
            SiteId: {inq: siteIds}
          },
          include: [
            "person"
          ]
        });
        
        const persons = resources.map(resource => {
          const resourceJSON = resource.toJSON();
          return resourceJSON.person;
        });
        
        return persons;
      } else {
        // Find from organizations which are allowed for the user.
        const salesPersons = await Person.app.models.salesperson.find({
          where: {
            UserId: accessToken.userId
          }
        });
 
        const allowedOrganizations = salesPersons.map(sales => sales.OrganizationId);
 
        if (allowedOrganizations.includes(organizationId)) {
 
          const sites = await Person.app.models.site.find({
            where: {
              OrganizationId: organizationId
            }
          });
          const siteIds = sites.map(site => site.id);
          const resources = await Person.app.models.resource.find({
            where: {
              SiteId: {inq: siteIds}
            },
            include: [
              "person"
            ]
          });
          
          const persons = resources.map(resource => {
            const resourceJSON = resource.toJSON();
            return resourceJSON.person;
          });
          
          return persons;
        } else {
          return [];
        }
      }
    } catch (error) {
      logger.error(`Error getting Persons, ${error}`);
      throw error;
    }
  };
 
  Person.remoteMethod('findPersonsByOrganization', {
    http: {verb: 'get'},
    accepts: [
      {
        arg: 'accessToken',
        type: 'object',
        http: function(ctx) {
          return ctx.req.accessToken;
        }
      },
      {
        arg: 'organizationId',
        type: 'number',
        required: true
      }
    ],
    returns: {
      arg: 'response',
      type: 'array'
    }
  });
};