Skip to content
Snippets Groups Projects
Select Git revision
  • 2174a619c0c455da191051f91f6473ebaf671ed6
  • main default protected
  • editUser
  • loadTests
  • fixTests
  • userhandling
  • updateEmbeddings
  • addRAGSources
  • testing
  • conversations
  • inputValidation
  • rag
  • chatting
  • userauth
14 results

handleSchemes.js

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    handleSchemes.js 2.05 KiB
    
    /**
     * get confidential fields from given schema based on attribute select: false
     *
     * @param   {model}  model  model to compute
     *
     * @return  {array}         matching field names 
     */
    export const getConfidentialFields = (model) => {
      performance.mark('getConfidentialFields:start');
      const schema = Object.entries(model.schema.paths);
      const confidentialFields = schema.filter(function (field) {
        return field[1].selected === false;
      });
      performance.mark('getConfidentialFields:end');
      return confidentialFields.map(field => field[0]);
    };
    
    
    /**
     * remove fields from given object that are stated as confidential
     *
     * @param   {model}  model   model to compute
     * @param   {object}  object  object to compute
     *
     * @return  {object}          cleansed object
     */
    export const hideConfidentialFields = (model, record) => {
      performance.mark('hideConfidentialFields:start');
      // turn mongoose record into js object
      const object = record.toObject();
      // get confidential fields from model
      const confidentialFields = getConfidentialFields(model);
      // delete confidential fields from object
      confidentialFields.forEach(field => delete object[field]);
      performance.mark('hideConfidentialFields:end');
      return object;
    };
    
    
    
    /**
     * get array of all field names from a given model
     *
     * @param   {model}  model  model to compute
     *
     * @return  {array}         all found field names
     */
    const getAllFieldnames = (model) => {
      return Object.keys(model.schema.paths);
    };
    
    /**
     * get an object with key:value pairs
     * wipe out all fields, not corresponding with given model
     *
     * @param   {model}  model  model to compute
     * @param   {object}  object  object, contains key:value
     *
     * @return  {object}          object with key:values only for fields, found in schema
     */
    export const prefillDocumentObject = (model, object) => {
      const allowedFields = getAllFieldnames(model);
      let result = Object.fromEntries(allowedFields.map((field) => {
        if (Object.hasOwnProperty.bind(object)(field)) {
          return [field, object[field]];
        }
      }).filter(field => field));
      return result;
    };