Source

server/utils/ssotToRobotParsing/retrieveParameters.js

/* eslint-disable no-unused-vars */
/**
 * @category Server
 * @module
 */
const mongoose = require('mongoose');
const { ACTIVITY_IDENTIFIER } = require('./robotCodeConstants');
const ssotModels = require('../../api/models/singleSourceOfTruthModel.js');
const jobsModel = require('../../api/models/robotJobModel.js');

/**
 * @description Will retrieve the associated parameter objects for all activities in the ssot 
 * @param {Object} ssot Ssot for which the parameters will be retrieved
 * @returns {Array} Array of parameter objects
 */
const retrieveParameters = async (ssot) => {
  const { id } = ssot;
  const { elements } = ssot;
  const listOfActivityIds = [];

  elements.forEach((element) => {
    if (element.type === ACTIVITY_IDENTIFIER) {
      listOfActivityIds.push(element.id);
    }
  });

  const parameterObjects = await mongoose
    .model('parameter')
    .find(
      {
        robotId: id,
        activityId: { $in: listOfActivityIds },
      },
      {
        activityId: 1,
        rpaParameters: 1,
        outputValue: 1,
      }
    )
    .exec();

  return parameterObjects;
};

/**
 * @description Updates Parameter Objects with new parameters
 * @param {Array} parameterObjects Selection of parameter objects that will possibly be updated
 * @param {Array} newParameters New parameters in the form {id, value} that will be used to update the parameter objects
 * @returns {Array} Array of updated parameter objects
 */
const updateParameterObjects = (parameterObjects, newParameters) => {
  parameterObjects.map((parameterObject) => {
    if (parameterObject.rpaParameters.length !== 0) {
      parameterObject.rpaParameters.map((currentParameter) => {
        newParameters.forEach((newParameter) => {
          if (
            // eslint-disable-next-line no-underscore-dangle
            String(newParameter.parameterId) === String(currentParameter._id)
          ) {
            // eslint-disable-next-line no-param-reassign
            currentParameter.value = newParameter.value;
          }
        });
        return currentParameter;
      });
    }
    return parameterObject;
  });
  return parameterObjects;
};

/**
 * @description Retrieves all parameters for a specific job
 * @param {String} jobId Id of the job
 * @returns {Array} Array of parameter objects
 */
const getAllParametersForJob = async (jobId) => {
  const jobParametersObject = await mongoose
    .model('job')
    .findById(jobId, { parameters: 1 });
  return jobParametersObject.parameters;
};

/**
 * @description Retrieves the associated parameter objects for all activities in the ssot
 * @param {Object} ssot Ssot for which the parameters will be retrieved
 * @param {String} jobId Job id identifiyng a job object from which the additional paramters will be fetched
 * @returns {Array} Array of parameter objects
 */
const retrieveParametersFromSsotAndJob = async (ssot, jobId) => {
  const parameterObjects = await retrieveParameters(ssot);
  const newParameters = await getAllParametersForJob(jobId);
  const parameterObjectsUpdated = await updateParameterObjects(
    parameterObjects,
    newParameters
  );
  return parameterObjectsUpdated;
};

module.exports = {
  retrieveParameters,
  retrieveParametersFromSsotAndJob,
};