Skip to content

Commit df6436a

Browse files
committed
resolve merge conflicts
2 parents a0c2e75 + a937365 commit df6436a

29 files changed

+1069
-114
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,20 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel
88

99
### Added
1010

11+
- Datasets: Added `updateDatasetLicense` use case and repository method to support Dataverse endpoint `PUT /datasets/{id}/license`, for updating dataset license or custom terms
1112
- New Use Case: [Get Collections For Linking Use Case](./docs/useCases.md#get-collections-for-linking).
1213
- New Use Case: [Create a Dataset Template](./docs/useCases.md#create-a-dataset-template) under Collections.
1314

14-
- In GetAllNotificationsByUser use case, added support for filtering unread messages and pagination.
15+
- New Use Case: [Update Terms of Access](./docs/useCases.md#update-terms-of-access).
1516

1617
### Changed
1718

19+
- Add pagination query parameters to Dataset Version Summeries and File Version Summaries use cases
20+
1821
### Fixed
1922

2023
- In GetAllNotificationsByUser use case, additionalInfo field is returned as an object instead of a string.
24+
- In GetAllNotificationsByUser use case, added support for filtering unread messages and pagination.
2125

2226
### Removed
2327

docs/useCases.md

Lines changed: 80 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ The different use cases currently available in the package are classified below,
4646
- [Datasets write use cases](#datasets-write-use-cases)
4747
- [Create a Dataset](#create-a-dataset)
4848
- [Update a Dataset](#update-a-dataset)
49+
- [Update a Dataset License](#update-a-dataset-license)
4950
- [Publish a Dataset](#publish-a-dataset)
5051
- [Deaccession a Dataset](#deaccession-a-dataset)
5152
- [Delete a Draft Dataset](#delete-a-draft-dataset)
@@ -872,7 +873,7 @@ The `DatasetPreviewSubset`returned instance contains a property called `totalDat
872873

873874
#### Get Dataset Versions Summaries
874875

875-
Returns an array of [DatasetVersionSummaryInfo](../src/datasets/domain/models/DatasetVersionSummaryInfo.ts) that contains information about what changed in every specific version.
876+
Returns the total count of versions and an array of [DatasetVersionSummaryInfo](../src/datasets/domain/models/DatasetVersionSummaryInfo.ts) that contains information about what changed in every specific version.
876877

877878
##### Example call:
878879

@@ -885,7 +886,7 @@ const datasetId = 'doi:10.77777/FK2/AAAAAA'
885886

886887
getDatasetVersionsSummaries
887888
.execute(datasetId)
888-
.then((datasetVersionsSummaries: DatasetVersionSummaryInfo[]) => {
889+
.then((datasetVersionsSummaries: DatasetVersionSummarySubset) => {
889890
/* ... */
890891
})
891892

@@ -894,7 +895,9 @@ getDatasetVersionsSummaries
894895

895896
_See [use case](../src/datasets/domain/useCases/GetDatasetVersionsSummaries.ts) implementation_.
896897

897-
The `datasetId` parameter can be a string, for persistent identifiers, or a number, for numeric identifiers.
898+
- The `datasetId` parameter can be a string, for persistent identifiers, or a number, for numeric identifiers.
899+
- **limit**: (number) Limit for pagination.
900+
- **offset**: (number) Offset for pagination.
898901

899902
#### Get Dataset Linked Collections
900903

@@ -1077,6 +1080,43 @@ updateDataset.execute(datasetId, datasetDTO)
10771080

10781081
_See [use case](../src/datasets/domain/useCases/UpdateDataset.ts) implementation_.
10791082

1083+
#### Update a Dataset License
1084+
1085+
Updates the license of a dataset by applying it to the draft version. If no draft exists, a new one is automatically created by the API. Supports predefined licenses (by name) or custom terms of use and access.
1086+
1087+
##### Example calls:
1088+
1089+
```typescript
1090+
import {
1091+
updateDatasetLicense,
1092+
DatasetLicenseUpdateRequest
1093+
} from '@iqss/dataverse-client-javascript'
1094+
1095+
/* ... */
1096+
1097+
const datasetId = 1
1098+
1099+
const predefinedPayload: DatasetLicenseUpdateRequest = { name: 'CC BY 4.0' }
1100+
await updateDatasetLicense.execute(datasetId, predefinedPayload)
1101+
1102+
const customPayload: DatasetLicenseUpdateRequest = {
1103+
customTerms: {
1104+
termsOfUse: 'Your terms of use',
1105+
confidentialityDeclaration: 'Your confidentiality declaration',
1106+
specialPermissions: 'Your special permissions',
1107+
restrictions: 'Your restrictions',
1108+
citationRequirements: 'Your citation requirements',
1109+
depositorRequirements: 'Your depositor requirements',
1110+
conditions: 'Your conditions',
1111+
disclaimer: 'Your disclaimer'
1112+
}
1113+
}
1114+
1115+
updateDatasetLicense.execute(datasetId, customPayload)
1116+
```
1117+
1118+
_See [use case](../src/datasets/domain/useCases/UpdateDatasetLicense.ts) implementation_.
1119+
10801120
The `datasetId` parameter can be a string, for persistent identifiers, or a number, for numeric identifiers.
10811121

10821122
#### Publish a Dataset
@@ -1112,6 +1152,38 @@ The `versionUpdateType` parameter can be a [VersionUpdateType](../src/datasets/d
11121152
- `VersionUpdateType.MAJOR`
11131153
- `VersionUpdateType.UPDATE_CURRENT`
11141154

1155+
#### Update Terms of Access
1156+
1157+
Updates the Terms of Access for restricted files on a dataset.
1158+
1159+
##### Example call:
1160+
1161+
```typescript
1162+
import { updateTermsOfAccess } from '@iqss/dataverse-client-javascript'
1163+
1164+
/* ... */
1165+
1166+
const datasetId = 3
1167+
1168+
await updateTermsOfAccess.execute(datasetId, {
1169+
fileAccessRequest: true,
1170+
termsOfAccessForRestrictedFiles: 'Your terms of access for restricted files',
1171+
dataAccessPlace: 'Your data access place',
1172+
originalArchive: 'Your original archive',
1173+
availabilityStatus: 'Your availability status',
1174+
contactForAccess: 'Your contact for access',
1175+
sizeOfCollection: 'Your size of collection',
1176+
studyCompletion: 'Your study completion'
1177+
})
1178+
```
1179+
1180+
_See [use case](../src/datasets/domain/useCases/UpdateTermsOfAccess.ts) implementation_.
1181+
1182+
Notes:
1183+
1184+
- If the dataset is already published, this action creates a DRAFT version containing the new terms.
1185+
- Unspecified fields are treated as omissions: sending only `fileAccessRequest` will update that field and leave all other terms absent (undefined). In practice, the new values you send fully replace the previous set of terms — so if you omit a field, you are effectively clearing it unless you include its original value in the new input.
1186+
11151187
#### Deaccession a Dataset
11161188

11171189
Deaccession a Dataset, given its identifier, version, and deaccessionDatasetDTO to perform.
@@ -2000,7 +2072,7 @@ The `fileId` parameter can be a string, for persistent identifiers, or a number,
20002072

20012073
#### Get File Version Summaries
20022074

2003-
Get the file versions summaries, return a list of summaries for each version
2075+
Get the file versions summaries, return a total count of versions and a list of summaries for each version
20042076

20052077
##### Example call:
20062078

@@ -2011,7 +2083,7 @@ import { getFileVersionSummaries } from '@iqss/dataverse-client-javascript'
20112083

20122084
const fileId = 1
20132085

2014-
getFileVersionSummaries.execute(fileId).then((fileVersionSummaries: fileVersionSummaryInfo[]) => {
2086+
getFileVersionSummaries.execute(fileId).then((fileVersionSummaries: fileVersionSummarySubset) => {
20152087
/* ... */
20162088
})
20172089

@@ -2020,6 +2092,9 @@ getFileVersionSummaries.execute(fileId).then((fileVersionSummaries: fileVersionS
20202092

20212093
_See [use case](../src/files/domain/useCases/GetFileVersionSummaries.ts) implementation_.
20222094

2095+
- **limit**: (number) Limit for pagination.
2096+
- **offset**: (number) Offset for pagination.
2097+
20232098
## Metadata Blocks
20242099

20252100
### Metadata Blocks read use cases
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { CustomTerms } from '../models/Dataset'
2+
3+
export interface DatasetLicenseUpdateRequest {
4+
name?: string
5+
customTerms?: CustomTerms
6+
}

src/datasets/domain/models/Dataset.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export interface CustomTerms {
5151
conditions?: string
5252
disclaimer?: string
5353
}
54+
5455
export interface TermsOfAccess {
5556
fileAccessRequest: boolean
5657
termsOfAccessForRestrictedFiles?: string

src/datasets/domain/models/DatasetVersionSummaryInfo.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ export interface DatasetVersionSummaryInfo {
66
publishedOn?: string
77
}
88

9+
export interface DatasetVersionSummarySubset {
10+
summaries: DatasetVersionSummaryInfo[]
11+
totalCount: number
12+
}
13+
914
export type DatasetVersionSummary = {
1015
[key: string]:
1116
| SummaryUpdates

src/datasets/domain/repositories/IDatasetsRepository.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ 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'
11+
import { DatasetVersionSummarySubset } from '../models/DatasetVersionSummaryInfo'
1212
import { DatasetLinkedCollection } from '../models/DatasetLinkedCollection'
1313
import { CitationFormat } from '../models/CitationFormat'
1414
import { FormattedCitation } from '../models/FormattedCitation'
1515
import { DatasetTemplate } from '../models/DatasetTemplate'
1616
import { DatasetType } from '../models/DatasetType'
17+
import { TermsOfAccess } from '../models/Dataset'
18+
import { DatasetLicenseUpdateRequest } from '../dtos/DatasetLicenseUpdateRequest'
1719
import { DatasetTypeDTO } from '../dtos/DatasetTypeDTO'
1820

1921
export interface IDatasetsRepository {
@@ -66,7 +68,11 @@ export interface IDatasetsRepository {
6668
datasetId: number | string,
6769
includeMDC?: boolean
6870
): Promise<DatasetDownloadCount>
69-
getDatasetVersionsSummaries(datasetId: number | string): Promise<DatasetVersionSummaryInfo[]>
71+
getDatasetVersionsSummaries(
72+
datasetId: number | string,
73+
limit?: number,
74+
offset?: number
75+
): Promise<DatasetVersionSummarySubset>
7076
deleteDatasetDraft(datasetId: number | string): Promise<void>
7177
linkDataset(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void>
7278
unlinkDataset(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void>
@@ -91,4 +97,9 @@ export interface IDatasetsRepository {
9197
licenses: string[]
9298
): Promise<void>
9399
deleteDatasetType(datasetTypeId: number): Promise<void>
100+
updateTermsOfAccess(datasetId: number | string, termsOfAccess: TermsOfAccess): Promise<void>
101+
updateDatasetLicense(
102+
datasetId: number | string,
103+
payload: DatasetLicenseUpdateRequest
104+
): Promise<void>
94105
}
Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { UseCase } from '../../../core/domain/useCases/UseCase'
2-
import { DatasetVersionSummaryInfo } from '../models/DatasetVersionSummaryInfo'
2+
import { DatasetVersionSummarySubset } from '../models/DatasetVersionSummaryInfo'
33
import { IDatasetsRepository } from '../repositories/IDatasetsRepository'
44

5-
export class GetDatasetVersionsSummaries implements UseCase<DatasetVersionSummaryInfo[]> {
5+
export class GetDatasetVersionsSummaries implements UseCase<DatasetVersionSummarySubset> {
66
private datasetsRepository: IDatasetsRepository
77

88
constructor(datasetsRepository: IDatasetsRepository) {
@@ -14,9 +14,15 @@ export class GetDatasetVersionsSummaries implements UseCase<DatasetVersionSummar
1414
* Draft versions will only be available to users who have permission to view unpublished drafts.
1515
*
1616
* @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.
17+
* @param {number} [limit] - Limit for pagination (optional).
18+
* @param {number} [offset] - Offset for pagination (optional).
19+
* @returns {Promise<DatasetVersionSummarySubset>} - A DatasetVersionSummarySubset containing the summaries and total count.
1820
*/
19-
async execute(datasetId: number | string): Promise<DatasetVersionSummaryInfo[]> {
20-
return await this.datasetsRepository.getDatasetVersionsSummaries(datasetId)
21+
async execute(
22+
datasetId: number | string,
23+
limit?: number,
24+
offset?: number
25+
): Promise<DatasetVersionSummarySubset> {
26+
return await this.datasetsRepository.getDatasetVersionsSummaries(datasetId, limit, offset)
2127
}
2228
}

src/datasets/domain/useCases/SetAvailableLicensesForDatasetType.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ export class SetAvailableLicensesForDatasetType implements UseCase<void> {
1010

1111
/**
1212
* Sets the available licenses for a given dataset type. This limits the license options when creating a dataset of this type.
13+
*
14+
* @param {number | string} [datasetTypeId] - The dataset type identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
15+
* @param {string[]} licenses - The licenses to set for the dataset type.
16+
* @returns {Promise<void>} - This method does not return anything upon successful completion.
1317
*/
1418
async execute(datasetTypeId: number | string, licenses: string[]): Promise<void> {
1519
return await this.datasetsRepository.setAvailableLicensesForDatasetType(datasetTypeId, licenses)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { IDatasetsRepository } from '../repositories/IDatasetsRepository'
3+
import { DatasetLicenseUpdateRequest } from '../dtos/DatasetLicenseUpdateRequest'
4+
5+
export class UpdateDatasetLicense implements UseCase<void> {
6+
private readonly datasetsRepository: IDatasetsRepository
7+
8+
constructor(datasetsRepository: IDatasetsRepository) {
9+
this.datasetsRepository = datasetsRepository
10+
}
11+
12+
/**
13+
* Updates the license of a dataset by applying it to the draft version. If no draft exists, a new one is created by the API.
14+
* Supports either predefined license by name or custom terms of use and access.
15+
*
16+
* @param {number | string} datasetId - The dataset identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
17+
* @param {DatasetLicenseUpdateRequest} payload - The payload containing the license name or custom terms of use and access.
18+
* @returns {Promise<void>} - This method does not return anything upon successful completion.
19+
*/
20+
async execute(datasetId: number | string, payload: DatasetLicenseUpdateRequest): Promise<void> {
21+
return this.datasetsRepository.updateDatasetLicense(datasetId, payload)
22+
}
23+
}
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 { IDatasetsRepository } from '../repositories/IDatasetsRepository'
3+
import { TermsOfAccess } from '../models/Dataset'
4+
5+
export class UpdateTermsOfAccess implements UseCase<void> {
6+
private datasetsRepository: IDatasetsRepository
7+
8+
constructor(datasetsRepository: IDatasetsRepository) {
9+
this.datasetsRepository = datasetsRepository
10+
}
11+
12+
/**
13+
* Sets the terms of access for a given dataset.
14+
*
15+
* @param {number | string} [datasetId] - The dataset identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
16+
* @param {TermsOfAccess} termsOfAccess - The terms of access to set for the dataset.
17+
* @returns {Promise<void>} - This method does not return anything upon successful completion.
18+
*/
19+
async execute(datasetId: number | string, termsOfAccess: TermsOfAccess): Promise<void> {
20+
return await this.datasetsRepository.updateTermsOfAccess(datasetId, termsOfAccess)
21+
}
22+
}

0 commit comments

Comments
 (0)