Skip to content

Commit fafe986

Browse files
authored
Merge pull request #430 from IQSS/427-edit-template-use-cases
add use cases for editing template to TemplatesRepository.ts
2 parents a16321b + a6c172f commit fafe986

22 files changed

Lines changed: 694 additions & 29 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: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel
2525
- New Use Case: [Create a Template](./docs/useCases.md#create-a-template) under Templates.
2626
- New Use Case: [Get a Template](./docs/useCases.md#get-a-template) under Templates.
2727
- New Use Case: [Delete a Template](./docs/useCases.md#delete-a-template) under Templates.
28+
- New Use Case: [Update Template Metadata](./docs/useCases.md#update-template-metadata) under Templates.
29+
- New Use Case: [Update Template License Terms](./docs/useCases.md#update-template-license-terms) under Templates.
30+
- New Use Case: [Update Template Terms Of Access](./docs/useCases.md#update-template-terms-of-access) under Templates.
2831
- Templates: Added `setTemplateAsDefault` use case and repository method to support Dataverse endpoint `POST /dataverses/{id}/template/default/{templateId}`.
2932
- Templates: Added `unsetTemplateAsDefault` use case and repository method to support Dataverse endpoint `DELETE /dataverses/{id}/template/default`.
3033
- New Use Case: [Update Terms of Access](./docs/useCases.md#update-terms-of-access).

docs/useCases.md

Lines changed: 81 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)
@@ -838,6 +841,84 @@ await unsetTemplateAsDefault.execute(collectionIdOrAlias)
838841

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

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

843924
### 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 .",
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+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { TemplateFieldDTO, TemplateInstructionDTO } from './CreateTemplateDTO'
2+
3+
export interface UpdateTemplateMetadataDTO {
4+
name?: string
5+
fields?: TemplateFieldDTO[]
6+
instructions?: TemplateInstructionDTO[]
7+
}

src/templates/domain/repositories/ITemplatesRepository.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,21 @@
11
import { CreateTemplateDTO } from '../dtos/CreateTemplateDTO'
2+
import { UpdateTemplateLicenseTermsDTO } from '../dtos/UpdateTemplateLicenseTermsDTO'
3+
import { UpdateTemplateMetadataDTO } from '../dtos/UpdateTemplateMetadataDTO'
24
import { Template } from '../models/Template'
5+
import { TermsOfAccess } from '../../../datasets/domain/models/Dataset'
36

47
export interface ITemplatesRepository {
58
createTemplate(collectionIdOrAlias: number | string, template: CreateTemplateDTO): Promise<void>
9+
updateTemplateMetadata(
10+
templateId: number,
11+
payload: UpdateTemplateMetadataDTO,
12+
replace?: boolean
13+
): Promise<void>
14+
updateTemplateLicenseTerms(
15+
templateId: number,
16+
payload: UpdateTemplateLicenseTermsDTO
17+
): Promise<void>
18+
updateTemplateTermsOfAccess(templateId: number, termsOfAccess: TermsOfAccess): Promise<void>
619
getTemplate(templateId: number): Promise<Template>
720
getTemplatesByCollectionId(collectionIdOrAlias: number | string): Promise<Template[]>
821
deleteTemplate(templateId: number): Promise<void>
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 { UpdateTemplateLicenseTermsDTO } from '../dtos/UpdateTemplateLicenseTermsDTO'
3+
import { ITemplatesRepository } from '../repositories/ITemplatesRepository'
4+
5+
export class UpdateTemplateLicenseTerms implements UseCase<void> {
6+
private templatesRepository: ITemplatesRepository
7+
8+
constructor(templatesRepository: ITemplatesRepository) {
9+
this.templatesRepository = templatesRepository
10+
}
11+
12+
/**
13+
* Updates the license terms for a template with the given identifier.
14+
*
15+
* @param {number} templateId - The unique identifier of the template to update.
16+
* @param {UpdateTemplateLicenseTermsDTO} payload - The license terms data to apply to the template.
17+
* @returns {Promise<void>} A promise that resolves when the license terms have been updated.
18+
*/
19+
async execute(templateId: number, payload: UpdateTemplateLicenseTermsDTO): Promise<void> {
20+
return await this.templatesRepository.updateTemplateLicenseTerms(templateId, payload)
21+
}
22+
}

0 commit comments

Comments
 (0)