diff --git a/.github/workflows/deploy_alpha.yml b/.github/workflows/deploy_alpha.yml index 5a442fe7..c81447d8 100644 --- a/.github/workflows/deploy_alpha.yml +++ b/.github/workflows/deploy_alpha.yml @@ -9,10 +9,10 @@ jobs: test-unit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 - name: Install npm dependencies run: npm ci @@ -23,10 +23,10 @@ jobs: test-integration: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 - name: Install npm dependencies run: npm ci @@ -37,10 +37,10 @@ jobs: test-functional: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 - name: Install npm dependencies run: npm ci @@ -54,10 +54,10 @@ jobs: permissions: packages: write steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 registry-url: https://npm.pkg.github.com/ - name: Install npm dependencies diff --git a/.github/workflows/deploy_pr.yml b/.github/workflows/deploy_pr.yml index f8cba6dd..74c21db3 100644 --- a/.github/workflows/deploy_pr.yml +++ b/.github/workflows/deploy_pr.yml @@ -6,10 +6,10 @@ jobs: test-unit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 - name: Install npm dependencies run: npm ci @@ -20,10 +20,10 @@ jobs: test-integration: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 - name: Install npm dependencies run: npm ci @@ -34,10 +34,10 @@ jobs: test-functional: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 - name: Install npm dependencies run: npm ci @@ -52,10 +52,10 @@ jobs: packages: write contents: read steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 registry-url: https://npm.pkg.github.com/ - name: Install npm dependencies diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 3eeeeb66..9c0e8093 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -6,10 +6,10 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 - name: Install npm dependencies run: npm ci diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f3a2c92..99a048cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,9 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel - New Use Case: [Create a Template](./docs/useCases.md#create-a-template) under Templates. - New Use Case: [Get a Template](./docs/useCases.md#get-a-template) under Templates. - New Use Case: [Delete a Template](./docs/useCases.md#delete-a-template) under Templates. +- New Use Case: [Update Template Metadata](./docs/useCases.md#update-template-metadata) under Templates. +- New Use Case: [Update Template License Terms](./docs/useCases.md#update-template-license-terms) under Templates. +- New Use Case: [Update Template Terms Of Access](./docs/useCases.md#update-template-terms-of-access) under Templates. - New Use Case: [Update Terms of Access](./docs/useCases.md#update-terms-of-access). ### Changed diff --git a/docs/useCases.md b/docs/useCases.md index f77a40e1..a8d45c00 100644 --- a/docs/useCases.md +++ b/docs/useCases.md @@ -32,6 +32,9 @@ The different use cases currently available in the package are classified below, - [Templates write use cases](#templates-write-use-cases) - [Create a Template](#create-a-template) - [Delete a Template](#delete-a-template) + - [Update Template Metadata](#update-template-metadata) + - [Update Template License Terms](#update-template-license-terms) + - [Update Template Terms Of Access](#update-template-terms-of-access) - [Datasets](#Datasets) - [Datasets read use cases](#datasets-read-use-cases) - [Get a Dataset](#get-a-dataset) @@ -669,6 +672,84 @@ await deleteTemplate.execute(templateId) _See [use case](../src/templates/domain/useCases/DeleteTemplate.ts)_ definition. +#### Update Template Metadata + +Updates template metadata fields and instructions for a template id. + +##### Example call: + +```typescript +import { updateTemplateMetadata } from '@iqss/dataverse-client-javascript' +import { UpdateTemplateMetadataDTO } from '@iqss/dataverse-client-javascript' + +const templateId = 12345 +const replace = true + +const payload: UpdateTemplateMetadataDTO = { + name: 'Dataverse template updated', + fields: [ + { + typeName: 'author', + typeClass: 'compound', + multiple: true, + value: [ + { + authorName: { typeName: 'authorName', value: 'Belicheck, Bill' }, + authorAffiliation: { typeName: 'authorIdentifierScheme', value: 'ORCID' } + } + ] + } + ], + instructions: [{ instructionField: 'author', instructionText: 'Updated instructions' }] +} + +await updateTemplateMetadata.execute(templateId, payload, replace) +``` + +_See [use case](../src/templates/domain/useCases/UpdateTemplateMetadata.ts) definition_. + +#### Update Template License Terms + +Updates either the license name or custom terms of use for a template id. + +##### Example call: + +```typescript +import { updateTemplateLicenseTerms } from '@iqss/dataverse-client-javascript' +import { UpdateTemplateLicenseTermsDTO } from '@iqss/dataverse-client-javascript' + +const templateId = 12345 + +const payload: UpdateTemplateLicenseTermsDTO = { + customTerms: { + termsOfUse: 'Updated template terms of use' + } +} + +await updateTemplateLicenseTerms.execute(templateId, payload) +``` + +_See [use case](../src/templates/domain/useCases/UpdateTemplateLicenseTerms.ts) definitition_. + +#### Update Template Terms Of Access + +Updates terms of access for a template id. + +##### Example call: + +```typescript +import { updateTemplateTermsOfAccess } from '@iqss/dataverse-client-javascript' + +const templateId = 12345 + +await updateTemplateTermsOfAccess.execute(templateId, { + fileAccessRequest: true, + termsOfAccessForRestrictedFiles: 'Restricted access only' +}) +``` + +_See [use case](../src/templates/domain/useCases/UpdateTemplateTermsOfAccess.ts) definition_. + ## Datasets ### Datasets Read Use Cases diff --git a/src/templates/domain/dtos/UpdateTemplateLicenseTermsDTO.ts b/src/templates/domain/dtos/UpdateTemplateLicenseTermsDTO.ts new file mode 100644 index 00000000..b476a07d --- /dev/null +++ b/src/templates/domain/dtos/UpdateTemplateLicenseTermsDTO.ts @@ -0,0 +1,6 @@ +import { CustomTerms } from '../../../datasets/domain/models/Dataset' + +export interface UpdateTemplateLicenseTermsDTO { + name?: string + customTerms?: CustomTerms +} diff --git a/src/templates/domain/dtos/UpdateTemplateMetadataDTO.ts b/src/templates/domain/dtos/UpdateTemplateMetadataDTO.ts new file mode 100644 index 00000000..3504fcea --- /dev/null +++ b/src/templates/domain/dtos/UpdateTemplateMetadataDTO.ts @@ -0,0 +1,7 @@ +import { TemplateFieldDTO, TemplateInstructionDTO } from './CreateTemplateDTO' + +export interface UpdateTemplateMetadataDTO { + name?: string + fields?: TemplateFieldDTO[] + instructions?: TemplateInstructionDTO[] +} diff --git a/src/templates/domain/repositories/ITemplatesRepository.ts b/src/templates/domain/repositories/ITemplatesRepository.ts index 3482d340..135aec3c 100644 --- a/src/templates/domain/repositories/ITemplatesRepository.ts +++ b/src/templates/domain/repositories/ITemplatesRepository.ts @@ -1,8 +1,21 @@ import { CreateTemplateDTO } from '../dtos/CreateTemplateDTO' +import { UpdateTemplateLicenseTermsDTO } from '../dtos/UpdateTemplateLicenseTermsDTO' +import { UpdateTemplateMetadataDTO } from '../dtos/UpdateTemplateMetadataDTO' import { Template } from '../models/Template' +import { TermsOfAccess } from '../../../datasets/domain/models/Dataset' export interface ITemplatesRepository { createTemplate(collectionIdOrAlias: number | string, template: CreateTemplateDTO): Promise + updateTemplateMetadata( + templateId: number, + payload: UpdateTemplateMetadataDTO, + replace?: boolean + ): Promise + updateTemplateLicenseTerms( + templateId: number, + payload: UpdateTemplateLicenseTermsDTO + ): Promise + updateTemplateTermsOfAccess(templateId: number, termsOfAccess: TermsOfAccess): Promise getTemplate(templateId: number): Promise