Skip to content

Commit 152dd19

Browse files
committed
Merge branch 'develop' into 269-get-dataset-download-count-use-case
2 parents 96b6e4b + 52f826c commit 152dd19

23 files changed

+813
-31
lines changed

docs/useCases.md

Lines changed: 55 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
@@ -1291,6 +1318,33 @@ The following error might arise from the `AddUploadedFileToDataset` use case:
12911318

12921319
- AddUploadedFileToDatasetError: This error indicates that there was an error while adding the uploaded file to the dataset.
12931320

1321+
#### Update File Metadata
1322+
1323+
Updates Metadata of a File.
1324+
1325+
###### Example call:
1326+
1327+
```typescript
1328+
import { updateFileMetadata } from '@iqss/dataverse-client-javascript'
1329+
1330+
/* ... */
1331+
1332+
const fileId: number | string = 123
1333+
const updateFileMetadataDTO = {
1334+
description: 'My description bbb.',
1335+
categories: ['Data'],
1336+
restrict: false
1337+
}
1338+
1339+
await updateFileMetadata.execute(fileId, updateFileMetadataDTO).then((fileId) => {
1340+
console.log(`File updated successfully with file ID: ${fileId}`)
1341+
})
1342+
```
1343+
1344+
_See [use case](../src/files/domain/useCases/UpdateFileMetadata.ts) implementation_.
1345+
1346+
The `fileId` parameter can be a string, for persistent identifiers, or a number, for numeric identifiers.
1347+
12941348
#### Delete a File
12951349

12961350
Deletes a File.

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
@@ -8,6 +8,7 @@ import { DatasetDeaccessionDTO } from '../dtos/DatasetDeaccessionDTO'
88
import { MetadataBlock } from '../../../metadataBlocks'
99
import { DatasetVersionDiff } from '../models/DatasetVersionDiff'
1010
import { DatasetDownloadCount } from '../models/DatasetDownloadCount'
11+
import { DatasetVersionSummaryInfo } from '../models/DatasetVersionSummaryInfo'
1112

1213
export interface IDatasetsRepository {
1314
getDataset(
@@ -53,4 +54,5 @@ export interface IDatasetsRepository {
5354
deaccessionDTO: DatasetDeaccessionDTO
5455
): Promise<void>
5556
getDatasetDownloadCount(datasetId: number, includeMDC?: boolean): Promise<DatasetDownloadCount>
57+
getDatasetVersionsSummaries(datasetId: number | string): Promise<DatasetVersionSummaryInfo[]>
5658
}
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
@@ -18,6 +18,7 @@ import { UpdateDataset } from './domain/useCases/UpdateDataset'
1818
import { GetDatasetVersionDiff } from './domain/useCases/GetDatasetVersionDiff'
1919
import { DeaccessionDataset } from './domain/useCases/DeaccessionDataset'
2020
import { GetDatasetDownloadCount } from './domain/useCases/GetDatasetDownloadCount'
21+
import { GetDatasetVersionsSummaries } from './domain/useCases/GetDatasetVersionsSummaries'
2122

2223
const datasetsRepository = new DatasetsRepository()
2324

@@ -50,6 +51,7 @@ const updateDataset = new UpdateDataset(
5051
)
5152
const deaccessionDataset = new DeaccessionDataset(datasetsRepository)
5253
const getDatasetDownloadCount = new GetDatasetDownloadCount(datasetsRepository)
54+
const getDatasetVersionsSummaries = new GetDatasetVersionsSummaries(datasetsRepository)
5355

5456
export {
5557
getDataset,
@@ -65,7 +67,8 @@ export {
6567
createDataset,
6668
updateDataset,
6769
deaccessionDataset,
68-
getDatasetDownloadCount
70+
getDatasetDownloadCount,
71+
getDatasetVersionsSummaries
6972
}
7073
export { DatasetNotNumberedVersion } from './domain/models/DatasetNotNumberedVersion'
7174
export { DatasetUserPermissions } from './domain/models/DatasetUserPermissions'
@@ -95,3 +98,7 @@ export {
9598
export { DatasetDeaccessionDTO } from './domain/dtos/DatasetDeaccessionDTO'
9699
export { CreatedDatasetIdentifiers } from './domain/models/CreatedDatasetIdentifiers'
97100
export { VersionUpdateType } from './domain/models/Dataset'
101+
export {
102+
DatasetVersionSummaryInfo,
103+
DatasetVersionSummaryStringValues
104+
} from './domain/models/DatasetVersionSummaryInfo'

src/datasets/infra/repositories/DatasetsRepository.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { transformDatasetPreviewsResponseToDatasetPreviewSubset } from './transf
1919
import { DatasetVersionDiff } from '../../domain/models/DatasetVersionDiff'
2020
import { transformDatasetVersionDiffResponseToDatasetVersionDiff } from './transformers/datasetVersionDiffTransformers'
2121
import { DatasetDownloadCount } from '../../domain/models/DatasetDownloadCount'
22+
import { DatasetVersionSummaryInfo } from '../../domain/models/DatasetVersionSummaryInfo'
2223

2324
export interface GetAllDatasetPreviewsQueryParams {
2425
per_page?: number
@@ -253,4 +254,17 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
253254
throw error
254255
})
255256
}
257+
258+
public async getDatasetVersionsSummaries(
259+
datasetId: string | number
260+
): Promise<DatasetVersionSummaryInfo[]> {
261+
return this.doGet(
262+
this.buildApiEndpoint(this.datasetsResourceName, 'versions/compareSummary', datasetId),
263+
true
264+
)
265+
.then((response) => response.data.data)
266+
.catch((error) => {
267+
throw error
268+
})
269+
}
256270
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export interface UpdateFileMetadataDTO {
2+
description?: string
3+
prevFreeform?: string
4+
categories?: string[]
5+
dataFileTags?: string[]
6+
restrict?: boolean
7+
}

src/files/domain/repositories/IFilesRepository.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { FileModel } from '../models/FileModel'
88
import { Dataset } from '../../../datasets'
99
import { FileUploadDestination } from '../models/FileUploadDestination'
1010
import { UploadedFileDTO } from '../dtos/UploadedFileDTO'
11+
import { UpdateFileMetadataDTO } from '../dtos/UpdateFileMetadataDTO'
1112

1213
export interface IFilesRepository {
1314
getDatasetFiles(
@@ -65,4 +66,8 @@ export interface IFilesRepository {
6566
replaceFile(fileId: number | string, uploadedFileDTO: UploadedFileDTO): Promise<undefined>
6667

6768
restrictFile(fileId: number | string, restrict: boolean): Promise<undefined>
69+
updateFileMetadata(
70+
fileId: number | string,
71+
updateFileMetadataDTO: UpdateFileMetadataDTO
72+
): Promise<void>
6873
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { IFilesRepository } from '../repositories/IFilesRepository'
3+
import { UpdateFileMetadataDTO } from '../dtos/UpdateFileMetadataDTO'
4+
5+
export class UpdateFileMetadata implements UseCase<void> {
6+
private filesRepository: IFilesRepository
7+
8+
constructor(filesRepository: IFilesRepository) {
9+
this.filesRepository = filesRepository
10+
}
11+
12+
/**
13+
* Updates the metadata for a particular File.
14+
* More detailed information about updating a file's metadata behavior can be found in https://guides.dataverse.org/en/latest/api/native-api.html#updating-file-metadata
15+
*
16+
* @param {number | string} [fileId] - The file identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
17+
* @param {UpdateFileMetadataDTO} [updateFileMetadataDTO] - The DTO containing the metadata updates.
18+
* @returns {Promise<void>}
19+
*/
20+
async execute(
21+
fileId: number | string,
22+
updateFileMetadataDTO: UpdateFileMetadataDTO
23+
): Promise<void> {
24+
await this.filesRepository.updateFileMetadata(fileId, updateFileMetadataDTO)
25+
}
26+
}

0 commit comments

Comments
 (0)