Skip to content

Commit 778f30c

Browse files
committed
feat: get and delete a single template by id
1 parent 243eda1 commit 778f30c

11 files changed

Lines changed: 372 additions & 62 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,14 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel
99
### Added
1010

1111
- Datasets: Added `updateDatasetLicense` use case and repository method to support Dataverse endpoint `PUT /datasets/{id}/license`, for updating dataset license or custom terms
12+
1213
- New Use Case: [Get Collections For Linking Use Case](./docs/useCases.md#get-collections-for-linking).
13-
- New Use Case: [Create a Dataset Template](./docs/useCases.md#create-a-dataset-template) under Collections.
14+
15+
- New Use Case: [Create a Dataset Template](./docs/useCases.md#create-a-dataset-template) under Templates.
16+
17+
- New Use Case: [Get a Template](./docs/useCases.md#get-a-template) under Templates.
18+
19+
- New Use Case: [Delete a Template](./docs/useCases.md#delete-a-template) under Templates.
1420

1521
- New Use Case: [Update Terms of Access](./docs/useCases.md#update-terms-of-access).
1622

docs/useCases.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@ The different use cases currently available in the package are classified below,
2727
- [Delete a Collection Featured Item](#delete-a-collection-featured-item)
2828
- [Templates](#Templates)
2929
- [Templates read use cases](#templates-read-use-cases)
30+
- [Get a Template](#get-a-template)
3031
- [Get Dataset Templates](#get-dataset-templates)
3132
- [Templates write use cases](#templates-write-use-cases)
3233
- [Create a Dataset Template](#create-a-dataset-template)
34+
- [Delete a Template](#delete-a-template)
3335
- [Datasets](#Datasets)
3436
- [Datasets read use cases](#datasets-read-use-cases)
3537
- [Get a Dataset](#get-a-dataset)
@@ -576,6 +578,24 @@ _See [use case](../src/collections/domain/useCases/DeleteCollectionFeaturedItem.
576578

577579
### Templates Read Use Cases
578580

581+
#### Get a Template
582+
583+
Returns a [DatasetTemplate](../src/template/domain/models/DatasetTemplate.ts) by its template id.
584+
585+
##### Example call:
586+
587+
```typescript
588+
import { getTemplate } from '@iqss/dataverse-client-javascript'
589+
590+
const templateId = 12345
591+
592+
getTemplate.execute(templateId).then((template: DatasetTemplate) => {
593+
/* ... */
594+
})
595+
```
596+
597+
_See [use case](../src/template/domain/useCases/GetTemplate.ts)_ definition.
598+
579599
#### Get Dataset Templates
580600

581601
Returns a [DatasetTemplate](../src/template/domain/models/DatasetTemplate.ts) array containing the dataset templates of the requested collection, given the collection identifier or alias.
@@ -631,6 +651,22 @@ await createDatasetTemplate.execute(template, collectionAlias)
631651

632652
_See [use case](../src/template/domain/useCases/CreateDatasetTemplate.ts) implementation_.
633653

654+
#### Delete a Template
655+
656+
Deletes a dataset template by its template id.
657+
658+
##### Example call:
659+
660+
```typescript
661+
import { deleteTemplate } from '@iqss/dataverse-client-javascript'
662+
663+
const templateId = 12345
664+
665+
await deleteTemplate.execute(templateId)
666+
```
667+
668+
_See [use case](../src/template/domain/useCases/DeleteTemplate.ts)_ definition.
669+
634670
## Datasets
635671

636672
### Datasets Read Use Cases

src/template/domain/repositories/ITemplatesRepository.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@ export interface ITemplatesRepository {
66
collectionIdOrAlias: number | string,
77
template: CreateDatasetTemplateDTO
88
): Promise<void>
9+
getTemplate(templateId: number): Promise<DatasetTemplate>
910
getDatasetTemplates(collectionIdOrAlias: number | string): Promise<DatasetTemplate[]>
11+
deleteTemplate(templateId: number): Promise<void>
1012
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { ITemplatesRepository } from '../repositories/ITemplatesRepository'
3+
4+
export class DeleteTemplate implements UseCase<void> {
5+
private templatesRepository: ITemplatesRepository
6+
7+
constructor(templatesRepository: ITemplatesRepository) {
8+
this.templatesRepository = templatesRepository
9+
}
10+
11+
/**
12+
* Deletes a dataset template by its template id.
13+
*
14+
* @param {number} templateId - Dataset template id.
15+
*/
16+
async execute(templateId: number): Promise<void> {
17+
return await this.templatesRepository.deleteTemplate(templateId)
18+
}
19+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { DatasetTemplate } from '../models/DatasetTemplate'
3+
import { ITemplatesRepository } from '../repositories/ITemplatesRepository'
4+
5+
export class GetTemplate implements UseCase<DatasetTemplate> {
6+
private templatesRepository: ITemplatesRepository
7+
8+
constructor(templatesRepository: ITemplatesRepository) {
9+
this.templatesRepository = templatesRepository
10+
}
11+
12+
/**
13+
* Returns a dataset template by its template id.
14+
*
15+
* @param {number} templateId - Dataset template id.
16+
* @returns {Promise<DatasetTemplate>}
17+
*/
18+
async execute(templateId: number): Promise<DatasetTemplate> {
19+
return await this.templatesRepository.getTemplate(templateId)
20+
}
21+
}

src/template/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
import { TemplatesRepository } from './infra/repositories/TemplatesRepository'
22
import { CreateDatasetTemplate } from './domain/useCases/CreateDatasetTemplate'
3+
import { DeleteTemplate } from './domain/useCases/DeleteTemplate'
34
import { GetDatasetTemplates } from './domain/useCases/GetDatasetTemplates'
5+
import { GetTemplate } from './domain/useCases/GetTemplate'
46

57
const templatesRepository = new TemplatesRepository()
68

79
const createDatasetTemplate = new CreateDatasetTemplate(templatesRepository)
10+
const deleteTemplate = new DeleteTemplate(templatesRepository)
811
const getDatasetTemplates = new GetDatasetTemplates(templatesRepository)
12+
const getTemplate = new GetTemplate(templatesRepository)
913

10-
export { createDatasetTemplate, getDatasetTemplates }
14+
export { createDatasetTemplate, deleteTemplate, getDatasetTemplates, getTemplate }
1115
export {
1216
CreateDatasetTemplateDTO,
1317
TemplateFieldDTO,

src/template/infra/repositories/TemplatesRepository.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import { CreateDatasetTemplateDTO } from '../../domain/dtos/CreateDatasetTemplat
44
import { DatasetTemplate } from '../../domain/models/DatasetTemplate'
55
import { ITemplatesRepository } from '../../domain/repositories/ITemplatesRepository'
66
import { DatasetTemplatePayload } from './transformers/DatasetTemplatePayload'
7-
import { transformDatasetTemplatePayloadToDatasetTemplate } from './transformers/datasetTemplateTransformers'
7+
import {
8+
transformTemplatePayloadToTemplate,
9+
transformTemplatePayloadsToTemplates
10+
} from './transformers/datasetTemplateTransformers'
811

912
export class TemplatesRepository extends ApiRepository implements ITemplatesRepository {
1013
private readonly collectionsResourceName: string = 'dataverses'
@@ -23,15 +26,33 @@ export class TemplatesRepository extends ApiRepository implements ITemplatesRepo
2326
})
2427
}
2528

29+
public async getTemplate(templateId: number): Promise<DatasetTemplate> {
30+
return this.doGet(`/dataverses/${templateId}/template`, true)
31+
.then((response: AxiosResponse<{ data: DatasetTemplatePayload }>) =>
32+
transformTemplatePayloadToTemplate(response.data.data)
33+
)
34+
.catch((error) => {
35+
throw error
36+
})
37+
}
38+
2639
public async getDatasetTemplates(
2740
collectionIdOrAlias: number | string
2841
): Promise<DatasetTemplate[]> {
2942
return this.doGet(`/${this.collectionsResourceName}/${collectionIdOrAlias}/templates`, true)
3043
.then((response: AxiosResponse<{ data: DatasetTemplatePayload[] }>) =>
31-
transformDatasetTemplatePayloadToDatasetTemplate(response.data.data)
44+
transformTemplatePayloadsToTemplates(response.data.data)
3245
)
3346
.catch((error) => {
3447
throw error
3548
})
3649
}
50+
51+
public async deleteTemplate(templateId: number): Promise<void> {
52+
return this.doDelete(`/dataverses/${templateId}/template`)
53+
.then(() => undefined)
54+
.catch((error) => {
55+
throw error
56+
})
57+
}
3758
}

src/template/infra/repositories/transformers/datasetTemplateTransformers.ts

Lines changed: 57 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3,55 +3,66 @@ import { DatasetTemplate } from '../../../domain/models/DatasetTemplate'
33
import { DatasetTemplatePayload } from './DatasetTemplatePayload'
44
import { transformPayloadToDatasetMetadataBlocks } from '../../../../datasets/infra/repositories/transformers/datasetTransformers'
55

6-
export const transformDatasetTemplatePayloadToDatasetTemplate = (
7-
collectionDatasetTemplatePayload: DatasetTemplatePayload[]
8-
): DatasetTemplate[] => {
9-
return collectionDatasetTemplatePayload.map((payload) => {
10-
const datasetTemplate: DatasetTemplate = {
11-
id: payload.id,
12-
name: payload.name,
13-
collectionAlias: payload.dataverseAlias,
14-
isDefault: payload.isDefault,
15-
usageCount: payload.usageCount,
16-
createTime: payload.createTime,
17-
createDate: payload.createDate,
18-
datasetMetadataBlocks: transformPayloadToDatasetMetadataBlocks(payload.datasetFields, false),
19-
instructions: payload.instructions.map((instruction) => ({
20-
instructionField: instruction.instructionField,
21-
instructionText: instruction.instructionText
22-
})),
23-
termsOfUse: {
24-
termsOfAccess: {
25-
fileAccessRequest: payload.termsOfUseAndAccess.fileAccessRequest,
26-
termsOfAccessForRestrictedFiles: payload.termsOfUseAndAccess.termsOfAccess,
27-
dataAccessPlace: payload.termsOfUseAndAccess.dataAccessPlace,
28-
originalArchive: payload.termsOfUseAndAccess.originalArchive,
29-
availabilityStatus: payload.termsOfUseAndAccess.availabilityStatus,
30-
contactForAccess: payload.termsOfUseAndAccess.contactForAccess,
31-
sizeOfCollection: payload.termsOfUseAndAccess.sizeOfCollection,
32-
studyCompletion: payload.termsOfUseAndAccess.studyCompletion
33-
}
6+
export const transformTemplatePayloadToTemplate = (
7+
collectionDatasetTemplatePayload: DatasetTemplatePayload
8+
): DatasetTemplate => {
9+
const datasetTemplate: DatasetTemplate = {
10+
id: collectionDatasetTemplatePayload.id,
11+
name: collectionDatasetTemplatePayload.name,
12+
collectionAlias: collectionDatasetTemplatePayload.dataverseAlias,
13+
isDefault: collectionDatasetTemplatePayload.isDefault,
14+
usageCount: collectionDatasetTemplatePayload.usageCount,
15+
createTime: collectionDatasetTemplatePayload.createTime,
16+
createDate: collectionDatasetTemplatePayload.createDate,
17+
datasetMetadataBlocks: transformPayloadToDatasetMetadataBlocks(
18+
collectionDatasetTemplatePayload.datasetFields,
19+
false
20+
),
21+
instructions: collectionDatasetTemplatePayload.instructions.map((instruction) => ({
22+
instructionField: instruction.instructionField,
23+
instructionText: instruction.instructionText
24+
})),
25+
termsOfUse: {
26+
termsOfAccess: {
27+
fileAccessRequest: collectionDatasetTemplatePayload.termsOfUseAndAccess.fileAccessRequest,
28+
termsOfAccessForRestrictedFiles:
29+
collectionDatasetTemplatePayload.termsOfUseAndAccess.termsOfAccess,
30+
dataAccessPlace: collectionDatasetTemplatePayload.termsOfUseAndAccess.dataAccessPlace,
31+
originalArchive: collectionDatasetTemplatePayload.termsOfUseAndAccess.originalArchive,
32+
availabilityStatus: collectionDatasetTemplatePayload.termsOfUseAndAccess.availabilityStatus,
33+
contactForAccess: collectionDatasetTemplatePayload.termsOfUseAndAccess.contactForAccess,
34+
sizeOfCollection: collectionDatasetTemplatePayload.termsOfUseAndAccess.sizeOfCollection,
35+
studyCompletion: collectionDatasetTemplatePayload.termsOfUseAndAccess.studyCompletion
3436
}
3537
}
38+
}
3639

37-
if (payload.termsOfUseAndAccess.license) {
38-
datasetTemplate.license = transformPayloadLicenseToLicense(
39-
payload.termsOfUseAndAccess.license
40-
)
41-
} else {
42-
datasetTemplate.termsOfUse.customTerms = {
43-
termsOfUse: payload.termsOfUseAndAccess.termsOfUse as string,
44-
confidentialityDeclaration: payload.termsOfUseAndAccess
45-
.confidentialityDeclaration as string,
46-
specialPermissions: payload.termsOfUseAndAccess.specialPermissions as string,
47-
restrictions: payload.termsOfUseAndAccess.restrictions as string,
48-
citationRequirements: payload.termsOfUseAndAccess.citationRequirements as string,
49-
depositorRequirements: payload.termsOfUseAndAccess.depositorRequirements as string,
50-
conditions: payload.termsOfUseAndAccess.conditions as string,
51-
disclaimer: payload.termsOfUseAndAccess.disclaimer as string
52-
}
40+
if (collectionDatasetTemplatePayload.termsOfUseAndAccess.license) {
41+
datasetTemplate.license = transformPayloadLicenseToLicense(
42+
collectionDatasetTemplatePayload.termsOfUseAndAccess.license
43+
)
44+
} else {
45+
datasetTemplate.termsOfUse.customTerms = {
46+
termsOfUse: collectionDatasetTemplatePayload.termsOfUseAndAccess.termsOfUse as string,
47+
confidentialityDeclaration: collectionDatasetTemplatePayload.termsOfUseAndAccess
48+
.confidentialityDeclaration as string,
49+
specialPermissions: collectionDatasetTemplatePayload.termsOfUseAndAccess
50+
.specialPermissions as string,
51+
restrictions: collectionDatasetTemplatePayload.termsOfUseAndAccess.restrictions as string,
52+
citationRequirements: collectionDatasetTemplatePayload.termsOfUseAndAccess
53+
.citationRequirements as string,
54+
depositorRequirements: collectionDatasetTemplatePayload.termsOfUseAndAccess
55+
.depositorRequirements as string,
56+
conditions: collectionDatasetTemplatePayload.termsOfUseAndAccess.conditions as string,
57+
disclaimer: collectionDatasetTemplatePayload.termsOfUseAndAccess.disclaimer as string
5358
}
59+
}
5460

55-
return datasetTemplate
56-
})
61+
return datasetTemplate
62+
}
63+
64+
export const transformTemplatePayloadsToTemplates = (
65+
datasetTemplatePayloads: DatasetTemplatePayload[]
66+
): DatasetTemplate[] => {
67+
return datasetTemplatePayloads.map((payload) => transformTemplatePayloadToTemplate(payload))
5768
}

0 commit comments

Comments
 (0)