const parseServiceMapping = function()

in django_airavata/apps/api/static/django_airavata_api/js/services/ServiceFactory.js [28:145]


const parseServiceMapping = function (serviceConfiguration) {
  const mappedFunctions = {};
  let viewSetFunctions = [];
  if (serviceConfiguration.viewSet === true) {
    viewSetFunctions = ["list", "create", "update", "delete", "retrieve"];
  } else if (serviceConfiguration.viewSet instanceof Array) {
    viewSetFunctions = serviceConfiguration.viewSet;
  }
  let url = serviceConfiguration.url;
  if (!url.endsWith("/")) {
    url = url + "/";
  }
  let modelClass = serviceConfiguration.modelClass;
  let queryParams = serviceConfiguration.queryParams;
  let defaultPagination = serviceConfiguration.pagination ? true : false;
  let encodePathParams =
    "encodePathParams" in serviceConfiguration
      ? serviceConfiguration.encodePathParams
      : true;
  for (let viewSetFunction of viewSetFunctions) {
    let viewSetFunctionName = viewSetFunction;
    let pagination = defaultPagination;
    if (typeof viewSetFunctionName !== "string") {
      viewSetFunctionName = viewSetFunction.name;
      if ("pagination" in viewSetFunction) {
        pagination = viewSetFunction.pagination;
      }
    }
    switch (viewSetFunctionName) {
      case "list":
        mappedFunctions["list"] = {
          url: url,
          requestType: getKey,
          modelClass: modelClass,
          queryParams: queryParams,
          initialDataParam: viewSetFunction.initialDataParam,
          encodePathParams: encodePathParams,
        };
        break;
      case "create":
        mappedFunctions["create"] = {
          url: url,
          requestType: postKey,
          bodyParams: {
            name: "data",
          },
          modelClass: modelClass,
          queryParams: queryParams,
          encodePathParams: encodePathParams,
        };
        break;
      case "update":
        mappedFunctions["update"] = {
          url: url + "<lookup>/",
          requestType: putKey,
          bodyParams: {
            name: "data",
          },
          modelClass: modelClass,
          queryParams: queryParams,
          encodePathParams: encodePathParams,
        };
        break;
      case "retrieve":
        mappedFunctions["retrieve"] = {
          url: url + "<lookup>/",
          requestType: getKey,
          modelClass: modelClass,
          queryParams: queryParams,
          initialDataParam: viewSetFunction.initialDataParam,
          encodePathParams: encodePathParams,
        };
        break;
      case "delete":
        mappedFunctions["delete"] = {
          url: url + "<lookup>/",
          requestType: delKey,
          modelClass: modelClass,
          queryParams: queryParams,
          encodePathParams: encodePathParams,
        };
        break;
      default:
        // Assume all fields have been provided
        mappedFunctions[viewSetFunctionName] = viewSetFunction;
        break;
    }
    mappedFunctions[viewSetFunctionName].pagination = pagination;
  }
  if ("methods" in serviceConfiguration) {
    for (let methodName of Object.keys(serviceConfiguration["methods"])) {
      let methodConfig = serviceConfiguration["methods"][methodName];
      mappedFunctions[methodName] = {
        url: methodConfig.url || url,
        requestType: methodConfig.requestType || getKey,
        queryParams: methodConfig.queryParams || queryParams,
        pagination:
          "pagination" in methodConfig
            ? methodConfig.pagination
            : defaultPagination,
        encodePathParams:
          "encodePathParams" in methodConfig
            ? methodConfig.encodePathParams
            : true,
      };
      if ("modelClass" in methodConfig) {
        mappedFunctions[methodName]["modelClass"] = methodConfig.modelClass;
      }
      if ("bodyParams" in methodConfig) {
        mappedFunctions[methodName]["bodyParams"] = methodConfig.bodyParams;
      }
      if ("pathParams" in methodConfig) {
        mappedFunctions[methodName]["pathParams"] = methodConfig.pathParams;
      }
    }
  }
  return mappedFunctions;
};