mirror of
				https://github.com/datahub-project/datahub.git
				synced 2025-11-04 04:39:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import Ember from 'ember';
 | 
						|
import { createInitialComplianceInfo } from 'wherehows-web/utils/datasets/compliance-policy';
 | 
						|
import { datasetUrlById } from 'wherehows-web/utils/api/datasets/shared';
 | 
						|
import { ApiStatus } from 'wherehows-web/utils/api/shared';
 | 
						|
import { IComplianceSuggestion, IComplianceSuggestionResponse } from 'wherehows-web/typings/api/datasets/compliance';
 | 
						|
 | 
						|
const { $: { getJSON }, assert } = Ember;
 | 
						|
 | 
						|
/**
 | 
						|
 * Constructs the dataset compliance url
 | 
						|
 * @param {number} id the id of the dataset
 | 
						|
 * @return {string} the dataset compliance url
 | 
						|
 */
 | 
						|
const datasetComplianceUrlById = (id: number): string => `${datasetUrlById(id)}/compliance`;
 | 
						|
 | 
						|
/**
 | 
						|
 * Constructs the compliance suggestions url based of the compliance id
 | 
						|
 * @param {number} id the id of the dataset
 | 
						|
 * @return {string} compliance suggestions url
 | 
						|
 */
 | 
						|
const datasetComplianceSuggestionsUrlById = (id: number): string => `${datasetComplianceUrlById(id)}/suggestions`;
 | 
						|
 | 
						|
/**
 | 
						|
 * Fetches the current compliance policy for a dataset with thi given id
 | 
						|
 * @param {number} id the id of the dataset
 | 
						|
 * @return {Promise<{isNewComplianceInfo: boolean, complianceInfo: *}>}
 | 
						|
 */
 | 
						|
const readDatasetCompliance = async (id: number): Promise<{ isNewComplianceInfo: boolean; complianceInfo: any }> => {
 | 
						|
  assert(`Expected id to be a number but received ${typeof id}`, typeof id === 'number');
 | 
						|
  const notFound = 'No entity found for query';
 | 
						|
  // complianceInfo contains the compliance data for the specified dataset
 | 
						|
  let {
 | 
						|
    msg = '',
 | 
						|
    status,
 | 
						|
    complianceInfo
 | 
						|
  }: { msg: string; status: ApiStatus; complianceInfo: any } = await Promise.resolve(
 | 
						|
    getJSON(datasetComplianceUrlById(id))
 | 
						|
  );
 | 
						|
  // If the endpoint responds with a failed status, and the msg contains the indicator that a compliance does not exist
 | 
						|
  const isNewComplianceInfo: boolean = status === ApiStatus.FAILED && String(msg).includes(notFound);
 | 
						|
 | 
						|
  if (isNewComplianceInfo) {
 | 
						|
    complianceInfo = createInitialComplianceInfo(id);
 | 
						|
  }
 | 
						|
 | 
						|
  return { isNewComplianceInfo, complianceInfo };
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Requests the compliance suggestions for a given dataset Id and returns the suggestion list
 | 
						|
 * @param {number} id the id of the dataset
 | 
						|
 * @return {Promise<IComplianceSuggestion>}
 | 
						|
 */
 | 
						|
const readDatasetComplianceSuggestion = async (id: number): Promise<IComplianceSuggestion> => {
 | 
						|
  const { complianceSuggestion = <IComplianceSuggestion>{} }: IComplianceSuggestionResponse = await Promise.resolve(
 | 
						|
    getJSON(datasetComplianceSuggestionsUrlById(id))
 | 
						|
  );
 | 
						|
  return complianceSuggestion;
 | 
						|
};
 | 
						|
 | 
						|
export { readDatasetCompliance, readDatasetComplianceSuggestion, datasetComplianceUrlById };
 |