Skip to content

Commit 0a587e8

Browse files
committed
Merge branch 'develop' into feat/get-collection-theme
# Conflicts: # CHANGELOG.md # src/collections/infra/repositories/transformers/collectionTransformers.ts
2 parents 3af3878 + 2b58ce3 commit 0a587e8

29 files changed

Lines changed: 1011 additions & 186 deletions

.github/workflows/deploy_alpha.yml

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ jobs:
99
test-unit:
1010
runs-on: ubuntu-latest
1111
steps:
12-
- uses: actions/checkout@v3
13-
- uses: actions/setup-node@v3
12+
- uses: actions/checkout@v4
13+
- uses: actions/setup-node@v4
1414
with:
15-
node-version: 19
15+
node-version: 22
1616

1717
- name: Install npm dependencies
1818
run: npm ci
@@ -23,10 +23,10 @@ jobs:
2323
test-integration:
2424
runs-on: ubuntu-latest
2525
steps:
26-
- uses: actions/checkout@v3
27-
- uses: actions/setup-node@v3
26+
- uses: actions/checkout@v4
27+
- uses: actions/setup-node@v4
2828
with:
29-
node-version: 19
29+
node-version: 22
3030

3131
- name: Install npm dependencies
3232
run: npm ci
@@ -35,12 +35,13 @@ jobs:
3535
run: npm run test:integration
3636

3737
test-functional:
38+
needs: [test-integration]
3839
runs-on: ubuntu-latest
3940
steps:
40-
- uses: actions/checkout@v3
41-
- uses: actions/setup-node@v3
41+
- uses: actions/checkout@v4
42+
- uses: actions/setup-node@v4
4243
with:
43-
node-version: 19
44+
node-version: 22
4445

4546
- name: Install npm dependencies
4647
run: npm ci
@@ -54,10 +55,10 @@ jobs:
5455
permissions:
5556
packages: write
5657
steps:
57-
- uses: actions/checkout@v3
58-
- uses: actions/setup-node@v3
58+
- uses: actions/checkout@v4
59+
- uses: actions/setup-node@v4
5960
with:
60-
node-version: 19
61+
node-version: 22
6162
registry-url: https://npm.pkg.github.com/
6263

6364
- name: Install npm dependencies

.github/workflows/deploy_pr.yml

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ jobs:
66
test-unit:
77
runs-on: ubuntu-latest
88
steps:
9-
- uses: actions/checkout@v3
10-
- uses: actions/setup-node@v3
9+
- uses: actions/checkout@v4
10+
- uses: actions/setup-node@v4
1111
with:
12-
node-version: 19
12+
node-version: 22
1313

1414
- name: Install npm dependencies
1515
run: npm ci
@@ -20,10 +20,10 @@ jobs:
2020
test-integration:
2121
runs-on: ubuntu-latest
2222
steps:
23-
- uses: actions/checkout@v3
24-
- uses: actions/setup-node@v3
23+
- uses: actions/checkout@v4
24+
- uses: actions/setup-node@v4
2525
with:
26-
node-version: 19
26+
node-version: 22
2727

2828
- name: Install npm dependencies
2929
run: npm ci
@@ -32,12 +32,13 @@ jobs:
3232
run: npm run test:integration
3333

3434
test-functional:
35+
needs: [test-integration]
3536
runs-on: ubuntu-latest
3637
steps:
37-
- uses: actions/checkout@v3
38-
- uses: actions/setup-node@v3
38+
- uses: actions/checkout@v4
39+
- uses: actions/setup-node@v4
3940
with:
40-
node-version: 19
41+
node-version: 22
4142

4243
- name: Install npm dependencies
4344
run: npm ci
@@ -52,10 +53,10 @@ jobs:
5253
packages: write
5354
contents: read
5455
steps:
55-
- uses: actions/checkout@v3
56-
- uses: actions/setup-node@v3
56+
- uses: actions/checkout@v4
57+
- uses: actions/setup-node@v4
5758
with:
58-
node-version: 19
59+
node-version: 22
5960
registry-url: https://npm.pkg.github.com/
6061

6162
- name: Install npm dependencies

.github/workflows/lint.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ jobs:
66
lint:
77
runs-on: ubuntu-latest
88
steps:
9-
- uses: actions/checkout@v3
10-
- uses: actions/setup-node@v3
9+
- uses: actions/checkout@v4
10+
- uses: actions/setup-node@v4
1111
with:
12-
node-version: 19
12+
node-version: 22
1313

1414
- name: Install npm dependencies
1515
run: npm ci

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel
88

99
### Added
1010

11+
- Collections: Added `allowedDatasetTypes` field to the [Collection](./src/collections/domain/models/Collection.ts) model. This field is optional and only populated the feature is enabled on the installation and configured on the collection.
1112
- Collections: Added theme information when retrieving a collection using `getCollection`.
1213

1314
### Changed
@@ -27,6 +28,9 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel
2728
- New Use Case: [Create a Template](./docs/useCases.md#create-a-template) under Templates.
2829
- New Use Case: [Get a Template](./docs/useCases.md#get-a-template) under Templates.
2930
- New Use Case: [Delete a Template](./docs/useCases.md#delete-a-template) under Templates.
31+
- New Use Case: [Update Template Metadata](./docs/useCases.md#update-template-metadata) under Templates.
32+
- New Use Case: [Update Template License Terms](./docs/useCases.md#update-template-license-terms) under Templates.
33+
- New Use Case: [Update Template Terms Of Access](./docs/useCases.md#update-template-terms-of-access) under Templates.
3034
- Templates: Added `setTemplateAsDefault` use case and repository method to support Dataverse endpoint `POST /dataverses/{id}/template/default/{templateId}`.
3135
- Templates: Added `unsetTemplateAsDefault` use case and repository method to support Dataverse endpoint `DELETE /dataverses/{id}/template/default`.
3236
- New Use Case: [Update Terms of Access](./docs/useCases.md#update-terms-of-access).

docs/useCases.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ The different use cases currently available in the package are classified below,
3636
- [Templates write use cases](#templates-write-use-cases)
3737
- [Create a Template](#create-a-template)
3838
- [Delete a Template](#delete-a-template)
39+
- [Update Template Metadata](#update-template-metadata)
40+
- [Update Template License Terms](#update-template-license-terms)
41+
- [Update Template Terms Of Access](#update-template-terms-of-access)
3942
- [Set Template As Default](#set-template-as-default)
4043
- [Unset Template As Default](#unset-template-as-default)
4144
- [Datasets](#Datasets)
@@ -194,6 +197,20 @@ The `collectionIdOrAlias` is a generic collection identifier, which can be eithe
194197

195198
If no collection identifier is specified, the default collection identifier; `:root` will be used. If you want to search for a different collection, you must add the collection identifier as a parameter in the use case call.
196199

200+
##### Collection Allowed Dataset Types
201+
202+
Collections can optionally restrict which [DatasetType](../src/datasets/domain/models/DatasetType.ts) objects can be created within them. The `allowedDatasetTypes` field contains an array of dataset types allowed on the collection when configured. If not configured on the collection, this field will be `undefined`.
203+
204+
```typescript
205+
getCollection.execute('myCollection').then((collection: Collection) => {
206+
if (collection.allowedDatasetTypes) {
207+
collection.allowedDatasetTypes.forEach((datasetType) => {
208+
console.log(`Allowed type: ${datasetType.displayName}`)
209+
})
210+
}
211+
})
212+
```
213+
197214
#### Get Collection Storage Driver
198215

199216
Returns a [StorageDriver](../src/core/domain/models/StorageDriver.ts) instance describing the collection's assigned storage driver.
@@ -838,6 +855,84 @@ await unsetTemplateAsDefault.execute(collectionIdOrAlias)
838855

839856
_See [use case](../src/templates/domain/useCases/UnsetTemplateAsDefault.ts)_ definition.
840857

858+
#### Update Template Metadata
859+
860+
Updates template metadata fields and instructions for a template id.
861+
862+
##### Example call:
863+
864+
```typescript
865+
import { updateTemplateMetadata } from '@iqss/dataverse-client-javascript'
866+
import { UpdateTemplateMetadataDTO } from '@iqss/dataverse-client-javascript'
867+
868+
const templateId = 12345
869+
const replace = true
870+
871+
const payload: UpdateTemplateMetadataDTO = {
872+
name: 'Dataverse template updated',
873+
fields: [
874+
{
875+
typeName: 'author',
876+
typeClass: 'compound',
877+
multiple: true,
878+
value: [
879+
{
880+
authorName: { typeName: 'authorName', value: 'Belicheck, Bill' },
881+
authorAffiliation: { typeName: 'authorIdentifierScheme', value: 'ORCID' }
882+
}
883+
]
884+
}
885+
],
886+
instructions: [{ instructionField: 'author', instructionText: 'Updated instructions' }]
887+
}
888+
889+
await updateTemplateMetadata.execute(templateId, payload, replace)
890+
```
891+
892+
_See [use case](../src/templates/domain/useCases/UpdateTemplateMetadata.ts) definition_.
893+
894+
#### Update Template License Terms
895+
896+
Updates either the license name or custom terms of use for a template id.
897+
898+
##### Example call:
899+
900+
```typescript
901+
import { updateTemplateLicenseTerms } from '@iqss/dataverse-client-javascript'
902+
import { UpdateTemplateLicenseTermsDTO } from '@iqss/dataverse-client-javascript'
903+
904+
const templateId = 12345
905+
906+
const payload: UpdateTemplateLicenseTermsDTO = {
907+
customTerms: {
908+
termsOfUse: 'Updated template terms of use'
909+
}
910+
}
911+
912+
await updateTemplateLicenseTerms.execute(templateId, payload)
913+
```
914+
915+
_See [use case](../src/templates/domain/useCases/UpdateTemplateLicenseTerms.ts) definitition_.
916+
917+
#### Update Template Terms Of Access
918+
919+
Updates terms of access for a template id.
920+
921+
##### Example call:
922+
923+
```typescript
924+
import { updateTemplateTermsOfAccess } from '@iqss/dataverse-client-javascript'
925+
926+
const templateId = 12345
927+
928+
await updateTemplateTermsOfAccess.execute(templateId, {
929+
fileAccessRequest: true,
930+
termsOfAccessForRestrictedFiles: 'Restricted access only'
931+
})
932+
```
933+
934+
_See [use case](../src/templates/domain/useCases/UpdateTemplateTermsOfAccess.ts) definition_.
935+
841936
## Datasets
842937

843938
### Datasets Read Use Cases

package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,16 @@
1010
"scripts": {
1111
"build": "tsc",
1212
"test": "jest -c jest.config.ts",
13+
"test:no-teardown": "TESTCONTAINERS_RYUK_DISABLED=true jest -c jest.config.ts",
1314
"test:unit": "jest -c jest.config.unit.ts",
1415
"test:integration": "jest -c jest.config.integration.ts",
16+
"test:integration:no-teardown": "TESTCONTAINERS_RYUK_DISABLED=true jest -c jest.config.integration.ts",
1517
"test:functional": "jest -c jest.config.functional.ts",
18+
"test:functional:no-teardown": "TESTCONTAINERS_RYUK_DISABLED=true jest -c jest.config.functional.ts",
1619
"test:coverage": "jest --coverage -c jest.config.ts",
20+
"test:coverage:no-teardown": "TESTCONTAINERS_RYUK_DISABLED=true jest --coverage -c jest.config.ts",
1721
"test:coverage:check": "jest --coverage --ci --config jest.config.ts",
22+
"test:coverage:check:no-teardown": "TESTCONTAINERS_RYUK_DISABLED=true jest --coverage --ci --config jest.config.ts",
1823
"lint": "npm run lint:eslint && npm run lint:prettier",
1924
"lint:fix": "eslint --fix --ext .ts ./src --ignore-path .gitignore .",
2025
"lint:eslint": "eslint --ignore-path .gitignore .",

src/collections/domain/models/Collection.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { DvObjectOwnerNode } from '../../../core'
22
import { CollectionContact } from './CollectionContact'
33
import { CollectionType } from './CollectionType'
4+
import { DatasetType } from '../../../datasets'
45

56
export interface Collection {
67
id: number
@@ -13,6 +14,7 @@ export interface Collection {
1314
inputLevels?: CollectionInputLevel[]
1415
type: CollectionType
1516
contacts?: CollectionContact[]
17+
allowedDatasetTypes?: DatasetType[]
1618
isMetadataBlockRoot: boolean
1719
isFacetRoot: boolean
1820
childCount: number

src/collections/infra/repositories/transformers/CollectionPayload.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export interface CollectionPayload {
1010
isPartOf: OwnerNodePayload
1111
inputLevels?: CollectionInputLevelPayload[]
1212
dataverseContacts?: CollectionContactPayload[]
13+
allowedDatasetTypes?: AllowedDatasetTypePayload[]
1314
dataverseType: string
1415
isMetadataBlockRoot: boolean
1516
isFacetRoot: boolean
@@ -38,3 +39,10 @@ export interface CollectionContactPayload {
3839
contactEmail: string
3940
displayOrder: number
4041
}
42+
43+
export interface AllowedDatasetTypePayload {
44+
id: number
45+
name: string
46+
displayName: string
47+
description?: string
48+
}

src/collections/infra/repositories/transformers/collectionTransformers.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
CollectionContactPayload,
55
CollectionInputLevelPayload,
66
CollectionPayload,
7+
AllowedDatasetTypePayload
78
} from './CollectionPayload'
89
import { transformPayloadToOwnerNode } from '../../../../core/infra/repositories/transformers/dvObjectOwnerNodeTransformer'
910
import { CollectionFacet } from '../../../domain/models/CollectionFacet'
@@ -13,7 +14,7 @@ import {
1314
CollectionItemSubset,
1415
CountPerObjectType
1516
} from '../../../domain/models/CollectionItemSubset'
16-
import { DatasetPreview } from '../../../../datasets'
17+
import { DatasetPreview, DatasetType } from '../../../../datasets'
1718
import { FilePreview } from '../../../../files'
1819
import { DatasetPreviewPayload } from '../../../../datasets/infra/repositories/transformers/DatasetPreviewPayload'
1920
import { FilePreviewPayload } from '../../../../files/infra/repositories/transformers/FilePreviewPayload'
@@ -85,6 +86,11 @@ const transformPayloadToCollection = (collectionPayload: CollectionPayload): Col
8586
}),
8687
...(collectionPayload.dataverseContacts && {
8788
contacts: transformContactsPayloadToContacts(collectionPayload.dataverseContacts)
89+
}),
90+
...(collectionPayload.allowedDatasetTypes && {
91+
allowedDatasetTypes: transformAllowedDatasetTypesPayloadToAllowedDatasetTypes(
92+
collectionPayload.allowedDatasetTypes
93+
)
8894
})
8995
}
9096
return collectionModel
@@ -255,3 +261,14 @@ const transformContactsPayloadToContacts = (
255261
displayOrder: contactPayload.displayOrder
256262
}))
257263
}
264+
265+
const transformAllowedDatasetTypesPayloadToAllowedDatasetTypes = (
266+
allowedDatasetTypesPayload: AllowedDatasetTypePayload[]
267+
): DatasetType[] => {
268+
return allowedDatasetTypesPayload.map((allowedDatasetType) => ({
269+
id: allowedDatasetType.id,
270+
name: allowedDatasetType.name,
271+
displayName: allowedDatasetType.displayName,
272+
description: allowedDatasetType.description
273+
}))
274+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { CustomTerms } from '../../../datasets/domain/models/Dataset'
2+
3+
export interface UpdateTemplateLicenseTermsDTO {
4+
name?: string
5+
customTerms?: CustomTerms
6+
}

0 commit comments

Comments
 (0)