Skip to content

Commit 471d6c9

Browse files
authored
Merge pull request #270 from IQSS/feat/260-get-dataset-versions-use-case
Get Dataset Versions Summaries use case
2 parents 25520a1 + 3020d48 commit 471d6c9

File tree

15 files changed

+510
-12
lines changed

15 files changed

+510
-12
lines changed

docs/useCases.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ The different use cases currently available in the package are classified below,
3333
- [Get User Permissions on a Dataset](#get-user-permissions-on-a-dataset)
3434
- [Get Differences between Two Dataset Versions](#get-differences-between-two-dataset-versions)
3535
- [List All Datasets](#list-all-datasets)
36+
- [Get Dataset Versions Summaries](#get-dataset-versions-summaries)
3637
- [Datasets write use cases](#datasets-write-use-cases)
3738
- [Create a Dataset](#create-a-dataset)
3839
- [Update a Dataset](#update-a-dataset)
@@ -577,7 +578,7 @@ const datasetId = 'doi:10.77777/FK2/AAAAAA'
577578
const oldVersion = '1.0'
578579
const newVersion = '2.0'
579580

580-
lgetDatasetVersionDiff
581+
getDatasetVersionDiff
581582
.execute(datasetId, oldVersion, newVersion)
582583
.then((versionDiff: DatasetVersionDiff) => {
583584
/* ... */
@@ -622,6 +623,32 @@ Note that `collectionId` is an optional parameter to filter datasets by collecti
622623

623624
The `DatasetPreviewSubset`returned instance contains a property called `totalDatasetCount` which is necessary for pagination.
624625

626+
#### Get Dataset Versions Summaries
627+
628+
Returns an array of [DatasetVersionSummaryInfo](../src/datasets/domain/models/DatasetVersionSummaryInfo.ts) that contains information about what changed in every specific version.
629+
630+
##### Example call:
631+
632+
```typescript
633+
import { getDatasetVersionsSummaries } from '@iqss/dataverse-client-javascript'
634+
635+
/* ... */
636+
637+
const datasetId = 'doi:10.77777/FK2/AAAAAA'
638+
639+
getDatasetVersionsSummaries
640+
.execute(datasetId)
641+
.then((datasetVersionsSummaries: DatasetVersionSummaryInfo[]) => {
642+
/* ... */
643+
})
644+
645+
/* ... */
646+
```
647+
648+
_See [use case](../src/datasets/domain/useCases/GetDatasetVersionsSummaries.ts) implementation_.
649+
650+
The `datasetId` parameter can be a string, for persistent identifiers, or a number, for numeric identifiers.
651+
625652
### Datasets Write Use Cases
626653

627654
#### Create a Dataset

jest.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const config: Config = {
99
moduleFileExtensions: ['ts', 'js', 'json', 'node'],
1010
coveragePathIgnorePatterns: ['node_modules', 'testHelpers'],
1111
globalSetup: '<rootDir>/test/environment/setup.ts',
12-
testTimeout: 25000,
12+
testTimeout: 35000,
1313
coverageThreshold: {
1414
global: {
1515
branches: 90,
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
export interface DatasetVersionSummaryInfo {
2+
id: number
3+
versionNumber: string
4+
summary?: DatasetVersionSummary | DatasetVersionSummaryStringValues
5+
contributors: string
6+
publishedOn?: string
7+
}
8+
9+
export type DatasetVersionSummary = {
10+
[key: string]: SummaryUpdates | SummaryUpdatesWithFields | FilesSummaryUpdates | boolean
11+
}
12+
13+
interface SummaryUpdates {
14+
added: number
15+
deleted: number
16+
changed: number
17+
}
18+
19+
interface SummaryUpdatesWithFields {
20+
[key: string]: SummaryUpdates
21+
}
22+
23+
interface FilesSummaryUpdates {
24+
added: number
25+
removed: number
26+
replaced: number
27+
changedFileMetaData: number
28+
changedVariableMetadata: number
29+
}
30+
31+
export enum DatasetVersionSummaryStringValues {
32+
firstPublished = 'firstPublished',
33+
firstDraft = 'firstDraft',
34+
versionDeaccessioned = 'versionDeaccessioned',
35+
previousVersionDeaccessioned = 'previousVersionDeaccessioned'
36+
}

src/datasets/domain/repositories/IDatasetsRepository.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { DatasetDTO } from '../dtos/DatasetDTO'
77
import { DatasetDeaccessionDTO } from '../dtos/DatasetDeaccessionDTO'
88
import { MetadataBlock } from '../../../metadataBlocks'
99
import { DatasetVersionDiff } from '../models/DatasetVersionDiff'
10+
import { DatasetVersionSummaryInfo } from '../models/DatasetVersionSummaryInfo'
1011

1112
export interface IDatasetsRepository {
1213
getDataset(
@@ -51,4 +52,5 @@ export interface IDatasetsRepository {
5152
datasetVersionId: string,
5253
deaccessionDTO: DatasetDeaccessionDTO
5354
): Promise<void>
55+
getDatasetVersionsSummaries(datasetId: number | string): Promise<DatasetVersionSummaryInfo[]>
5456
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { DatasetVersionSummaryInfo } from '../models/DatasetVersionSummaryInfo'
3+
import { IDatasetsRepository } from '../repositories/IDatasetsRepository'
4+
5+
export class GetDatasetVersionsSummaries implements UseCase<DatasetVersionSummaryInfo[]> {
6+
private datasetsRepository: IDatasetsRepository
7+
8+
constructor(datasetsRepository: IDatasetsRepository) {
9+
this.datasetsRepository = datasetsRepository
10+
}
11+
12+
/**
13+
* Returns a list of versions for a given dataset including a summary of differences between consecutive versions where available.
14+
* Draft versions will only be available to users who have permission to view unpublished drafts.
15+
*
16+
* @param {number | string} [datasetId] - The dataset identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
17+
* @returns {Promise<DatasetVersionSummaryInfo[]>} - An array of DatasetVersionSummaryInfo.
18+
*/
19+
async execute(datasetId: number | string): Promise<DatasetVersionSummaryInfo[]> {
20+
return await this.datasetsRepository.getDatasetVersionsSummaries(datasetId)
21+
}
22+
}

src/datasets/index.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { PublishDataset } from './domain/useCases/PublishDataset'
1717
import { UpdateDataset } from './domain/useCases/UpdateDataset'
1818
import { GetDatasetVersionDiff } from './domain/useCases/GetDatasetVersionDiff'
1919
import { DeaccessionDataset } from './domain/useCases/DeaccessionDataset'
20+
import { GetDatasetVersionsSummaries } from './domain/useCases/GetDatasetVersionsSummaries'
2021

2122
const datasetsRepository = new DatasetsRepository()
2223

@@ -48,6 +49,7 @@ const updateDataset = new UpdateDataset(
4849
datasetResourceValidator
4950
)
5051
const deaccessionDataset = new DeaccessionDataset(datasetsRepository)
52+
const getDatasetVersionsSummaries = new GetDatasetVersionsSummaries(datasetsRepository)
5153

5254
export {
5355
getDataset,
@@ -62,7 +64,8 @@ export {
6264
publishDataset,
6365
createDataset,
6466
updateDataset,
65-
deaccessionDataset
67+
deaccessionDataset,
68+
getDatasetVersionsSummaries
6669
}
6770
export { DatasetNotNumberedVersion } from './domain/models/DatasetNotNumberedVersion'
6871
export { DatasetUserPermissions } from './domain/models/DatasetUserPermissions'
@@ -92,3 +95,7 @@ export {
9295
export { DatasetDeaccessionDTO } from './domain/dtos/DatasetDeaccessionDTO'
9396
export { CreatedDatasetIdentifiers } from './domain/models/CreatedDatasetIdentifiers'
9497
export { VersionUpdateType } from './domain/models/Dataset'
98+
export {
99+
DatasetVersionSummaryInfo,
100+
DatasetVersionSummaryStringValues
101+
} from './domain/models/DatasetVersionSummaryInfo'

src/datasets/infra/repositories/DatasetsRepository.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { transformDatasetLocksResponseToDatasetLocks } from './transformers/data
1818
import { transformDatasetPreviewsResponseToDatasetPreviewSubset } from './transformers/datasetPreviewsTransformers'
1919
import { DatasetVersionDiff } from '../../domain/models/DatasetVersionDiff'
2020
import { transformDatasetVersionDiffResponseToDatasetVersionDiff } from './transformers/datasetVersionDiffTransformers'
21+
import { DatasetVersionSummaryInfo } from '../../domain/models/DatasetVersionSummaryInfo'
2122

2223
export interface GetAllDatasetPreviewsQueryParams {
2324
per_page?: number
@@ -235,4 +236,17 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
235236
throw error
236237
})
237238
}
239+
240+
public async getDatasetVersionsSummaries(
241+
datasetId: string | number
242+
): Promise<DatasetVersionSummaryInfo[]> {
243+
return this.doGet(
244+
this.buildApiEndpoint(this.datasetsResourceName, 'versions/compareSummary', datasetId),
245+
true
246+
)
247+
.then((response) => response.data.data)
248+
.catch((error) => {
249+
throw error
250+
})
251+
}
238252
}

test/environment/.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
POSTGRES_VERSION=13
22
DATAVERSE_DB_USER=dataverse
3-
SOLR_VERSION=9.3.0
3+
SOLR_VERSION=9.8.0
44
DATAVERSE_IMAGE_REGISTRY=docker.io
55
DATAVERSE_IMAGE_TAG=unstable
66
DATAVERSE_BOOTSTRAP_TIMEOUT=5m

0 commit comments

Comments
 (0)