IQSS / dataverse-client-javascript

A Dataverse client for JavaScript and TypeScript

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Refactor model transformers and test helpers to use payload interfaces instead of 'any'

GPortas opened this issue · comments

Overview of the Feature Request

Refactor model transformers and test helpers to use payload interfaces instead of 'any'

Example

Use a payload model like:

export interface DatasetPreviewPayload {
  global_id: string;
  name: string;
  versionId: number;
  majorVersion: number;
  minorVersion: number;
  versionState: string;
  createdAt: string;
  updatedAt: string;
  published_at?: string;
  citation: string;
  description: string;
}

export const transformDatasetPreviewsResponseToPreviews = (response: AxiosResponse): DatasetPreview[] => {
  const datasetPreviews: DatasetPreview[] = [];
  const datasetPreviewsPayload = response.data.data.items;
  datasetPreviewsPayload.forEach(function (datasetPreviewPayload: DatasetPreviewPayload) {
    datasetPreviews.push(transformDatasetPreviewPayloadToDatasetPreview(datasetPreviewPayload));
  });
  return datasetPreviews;
};

const transformDatasetPreviewPayloadToDatasetPreview = (
  datasetPreviewPayload: DatasetPreviewPayload,
): DatasetPreview => {
  return {
    persistentId: datasetPreviewPayload.global_id,
    title: datasetPreviewPayload.name,
    versionId: datasetPreviewPayload.versionId,
    versionInfo: {
      majorNumber: datasetPreviewPayload.majorVersion,
      minorNumber: datasetPreviewPayload.minorVersion,
      state: datasetPreviewPayload.versionState as DatasetVersionState,
      createTime: new Date(datasetPreviewPayload.createdAt),
      lastUpdateTime: new Date(datasetPreviewPayload.updatedAt),
      ...(datasetPreviewPayload.published_at && { releaseTime: new Date(datasetPreviewPayload.published_at) }),
    },
    citation: datasetPreviewPayload.citation,
    description: datasetPreviewPayload.description,
  };
};

Instead of

export const transformDatasetPreviewsResponseToPreviews = (response: AxiosResponse): DatasetPreview[] => {
  const datasetPreviews: DatasetPreview[] = [];
  const datasetPreviewsPayload = response.data.data.items;
  // eslint-disable-next-line  @typescript-eslint/no-explicit-any
  datasetPreviewsPayload.forEach(function (datasetPreviewPayload: any) {
    datasetPreviews.push(transformDatasetPreviewPayloadToDatasetPreview(datasetPreviewPayload));
  });
  return datasetPreviews;
};

// eslint-disable-next-line  @typescript-eslint/no-explicit-any
const transformDatasetPreviewPayloadToDatasetPreview = (datasetPreviewPayload: any): DatasetPreview => {
  return {
    persistentId: datasetPreviewPayload.global_id,
    title: datasetPreviewPayload.name,
    versionId: datasetPreviewPayload.versionId,
    versionInfo: {
      majorNumber: datasetPreviewPayload.majorVersion,
      minorNumber: datasetPreviewPayload.minorVersion,
      state: datasetPreviewPayload.versionState as DatasetVersionState,
      createTime: new Date(datasetPreviewPayload.createdAt),
      lastUpdateTime: new Date(datasetPreviewPayload.updatedAt),
      ...(datasetPreviewPayload.published_at && { releaseTime: new Date(datasetPreviewPayload.published_at) }),
    },
    citation: datasetPreviewPayload.citation,
    description: datasetPreviewPayload.description,
  };
};

What kind of user is the feature intended for?

Developer

What inspired the request?

What existing behavior do you want changed?

None

Any brand new behavior do you want to add to Dataverse?

None

Any open or closed issues related to this feature request?

  • #107 (First time we introduce payload models to avoid 'any')