Source: management-system/src/backend/shared-electron-server/data/iam/resources.js

import uuid from 'uuid';
import store from '../store.js';
import { resources } from './migrations/resources-migration.js';
import md5 from 'js-md5';

let resourcesMetaObjects = {};

/**
 * Returns all resources in form of an array
 *
 * @returns {Array} - array containing all resources
 */
export function getResources() {
  return Object.values(resourcesMetaObjects);
}

/**
 * Returns a resource based on resource id
 *
 * @param {String} resourceId - the id of a resource
 * @returns {Array} - array containing all resources
 */
export function getResource(resourceId) {
  return resourcesMetaObjects[resourceId];
}

/**
 * initializes the resources meta information objects
 */
export async function init() {
  resourcesMetaObjects = {};

  // get resources that were persistently stored
  const storedResources = store.get('resources');
  const copyOfStoredResources = JSON.parse(JSON.stringify(storedResources));
  copyOfStoredResources.forEach((resource) => delete resource.id);

  // check if hash is different, to know when the resources-migration file has changed to initiate a new migration
  if (md5(JSON.stringify(copyOfStoredResources)) !== md5(JSON.stringify(resources))) {
    // seed resources database with new resources
    resources.forEach((resource) => {
      resource.id = uuid.v4();
      resourcesMetaObjects[resource.id] = resource;
    });
    // set resources store
    store.set('resources', 'resources', Object.values(resourcesMetaObjects));
  } else {
    // set resources store
    store.set('resources', 'resources', storedResources);
    // set resources store cache for quick access
    storedResources.forEach((resource) => {
      resourcesMetaObjects[resource.id] = resource;
    });
  }
}

init();