IQSS / IQSS/dataverse-client-javascript
Refactor model transformers and test helpers to use payload interfaces instead of 'any'
オープン
まだ誰も着手していません。
Size: 3
- 主要言語
- TypeScript
- スター
- 20
- フォーク
- 11
- 平均マージ
- 2日 5時間
- マージ済み PR(30日)
- 1
説明
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?
- https://github.com/IQSS/dataverse-client-javascript/pull/107 (First time we introduce payload models to avoid 'any')
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
ファイルやテストは指定されていません。まず、any を使用しているモデル変換処理とテストヘルパーを探し、次に pull request #107 の payload-model アプローチと比較してください。関連する payload の値が any ではなく明示的なインターフェースを使用し、既存のテストが引き続き通れば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- typescript
- 領域
- api
- issue の種類
- リファクタリング
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 42/100