Skip to content

Commit cb113c5

Browse files
committed
Merge branch 'develop' into updateTermsOfAccess
2 parents 2349c6a + 421af81 commit cb113c5

27 files changed

+691
-112
lines changed

CHANGELOG.md

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

1111
- New Use Case: [Get Collections For Linking Use Case](./docs/useCases.md#get-collections-for-linking).
12+
- New Use Case: [Create a Dataset Template](./docs/useCases.md#create-a-dataset-template) under Collections.
1213

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

1516
### Changed
1617

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

1922
### Removed

docs/useCases.md

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ The different use cases currently available in the package are classified below,
2525
- [Update Collection Featured Items](#update-collection-featured-items)
2626
- [Delete Collection Featured Items](#delete-collection-featured-items)
2727
- [Delete a Collection Featured Item](#delete-a-collection-featured-item)
28+
- [Create a Dataset Template](#create-a-dataset-template)
2829
- [Datasets](#Datasets)
2930
- [Datasets read use cases](#datasets-read-use-cases)
3031
- [Get a Dataset](#get-a-dataset)
@@ -567,6 +568,41 @@ deleteCollectionFeaturedItem.execute(featuredItemId)
567568

568569
_See [use case](../src/collections/domain/useCases/DeleteCollectionFeaturedItem.ts)_ definition.
569570

571+
#### Create a Dataset Template
572+
573+
Creates a dataset template for a given Dataverse collection id or alias.
574+
575+
##### Example call:
576+
577+
```typescript
578+
import { createDatasetTemplate } from '@iqss/dataverse-client-javascript'
579+
import { TemplateCreateDTO } from '@iqss/dataverse-client-javascript'
580+
581+
const collectionAlias = ':root'
582+
const template: TemplateCreateDTO = {
583+
name: 'Dataverse template',
584+
isDefault: true,
585+
fields: [
586+
{
587+
typeName: 'author',
588+
typeClass: 'compound',
589+
multiple: true,
590+
value: [
591+
{
592+
authorName: { typeName: 'authorName', value: 'Belicheck, Bill' },
593+
authorAffiliation: { typeName: 'authorIdentifierScheme', value: 'ORCID' }
594+
}
595+
]
596+
}
597+
],
598+
instructions: [{ instructionField: 'author', instructionText: 'The author data' }]
599+
}
600+
601+
await createDatasetTemplate.execute(template, collectionAlias)
602+
```
603+
604+
_See [use case](../src/collections/domain/useCases/CreateDatasetTemplate.ts) implementation_.
605+
570606
## Datasets
571607

572608
### Datasets Read Use Cases
@@ -836,7 +872,7 @@ The `DatasetPreviewSubset`returned instance contains a property called `totalDat
836872

837873
#### Get Dataset Versions Summaries
838874

839-
Returns an array of [DatasetVersionSummaryInfo](../src/datasets/domain/models/DatasetVersionSummaryInfo.ts) that contains information about what changed in every specific version.
875+
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.
840876

841877
##### Example call:
842878

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

850886
getDatasetVersionsSummaries
851887
.execute(datasetId)
852-
.then((datasetVersionsSummaries: DatasetVersionSummaryInfo[]) => {
888+
.then((datasetVersionsSummaries: DatasetVersionSummarySubset) => {
853889
/* ... */
854890
})
855891

@@ -858,7 +894,9 @@ getDatasetVersionsSummaries
858894

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

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

863901
#### Get Dataset Linked Collections
864902

@@ -1996,7 +2034,7 @@ The `fileId` parameter can be a string, for persistent identifiers, or a number,
19962034

19972035
#### Get File Version Summaries
19982036

1999-
Get the file versions summaries, return a list of summaries for each version
2037+
Get the file versions summaries, return a total count of versions and a list of summaries for each version
20002038

20012039
##### Example call:
20022040

@@ -2007,7 +2045,7 @@ import { getFileVersionSummaries } from '@iqss/dataverse-client-javascript'
20072045

20082046
const fileId = 1
20092047

2010-
getFileVersionSummaries.execute(fileId).then((fileVersionSummaries: fileVersionSummaryInfo[]) => {
2048+
getFileVersionSummaries.execute(fileId).then((fileVersionSummaries: fileVersionSummarySubset) => {
20112049
/* ... */
20122050
})
20132051

@@ -2016,6 +2054,9 @@ getFileVersionSummaries.execute(fileId).then((fileVersionSummaries: fileVersionS
20162054

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

2057+
- **limit**: (number) Limit for pagination.
2058+
- **offset**: (number) Offset for pagination.
2059+
20192060
## Metadata Blocks
20202061

20212062
### Metadata Blocks read use cases
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { MetadataFieldTypeClass } from '../../../metadataBlocks/domain/models/MetadataBlock'
2+
3+
export interface CreateDatasetTemplateDTO {
4+
name: string
5+
isDefault?: boolean
6+
fields?: TemplateFieldDTO[]
7+
instructions?: TemplateInstructionDTO[]
8+
}
9+
10+
export interface TemplateFieldDTO {
11+
typeName: string
12+
multiple: boolean
13+
typeClass?: MetadataFieldTypeClass
14+
value?: TemplateFieldValueDTO[]
15+
}
16+
17+
export interface TemplateFieldValueDTO {
18+
[key: string]:
19+
| TemplateFieldValuePrimitiveDTO
20+
| TemplateFieldValueCompoundDTO
21+
| TemplateFieldValueControlledVocabularyDTO
22+
}
23+
24+
export interface TemplateFieldValuePrimitiveDTO {
25+
typeName: string
26+
typeClass: MetadataFieldTypeClass.Primitive
27+
value: string | string[]
28+
}
29+
30+
export interface TemplateFieldValueCompoundDTO {
31+
typeName: string
32+
typeClass: MetadataFieldTypeClass.Compound
33+
value: TemplateFieldValueDTO[]
34+
}
35+
36+
export interface TemplateFieldValueControlledVocabularyDTO {
37+
typeName: string
38+
typeClass: MetadataFieldTypeClass.ControlledVocabulary
39+
value: string
40+
}
41+
42+
export interface TemplateInstructionDTO {
43+
instructionField: string
44+
instructionText: string
45+
}

src/collections/domain/repositories/ICollectionsRepository.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { CollectionItemType } from '../../../collections/domain/models/Collectio
1212
import { CollectionLinks } from '../models/CollectionLinks'
1313
import { CollectionSummary } from '../models/CollectionSummary'
1414
import { LinkingObjectType } from '../useCases/GetCollectionsForLinking'
15+
import { CreateDatasetTemplateDTO } from '../dtos/CreateDatasetTemplateDTO'
1516

1617
export interface ICollectionsRepository {
1718
getCollection(collectionIdOrAlias: number | string): Promise<Collection>
@@ -68,4 +69,8 @@ export interface ICollectionsRepository {
6869
searchTerm: string,
6970
alreadyLinked: boolean
7071
): Promise<CollectionSummary[]>
72+
createDatasetTemplate(
73+
collectionIdOrAlias: number | string,
74+
template: CreateDatasetTemplateDTO
75+
): Promise<void>
7176
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { ROOT_COLLECTION_ID } from '../models/Collection'
2+
import { UseCase } from '../../../core/domain/useCases/UseCase'
3+
import { ICollectionsRepository } from '../repositories/ICollectionsRepository'
4+
import { CreateDatasetTemplateDTO } from '../dtos/CreateDatasetTemplateDTO'
5+
6+
export class CreateDatasetTemplate implements UseCase<void> {
7+
private collectionsRepository: ICollectionsRepository
8+
9+
constructor(collectionsRepository: ICollectionsRepository) {
10+
this.collectionsRepository = collectionsRepository
11+
}
12+
13+
/**
14+
* Creates a Dataset Template in the specified collection.
15+
*
16+
* @param {CreateDatasetTemplateDTO} template - Template definition payload.
17+
* @param {number | string} [collectionIdOrAlias = ':root'] - A generic collection identifier, which can be either a string (for queries by CollectionAlias), or a number (for queries by CollectionId)
18+
* If this parameter is not set, the default value is: ':root'.
19+
* @returns {Promise<void>}
20+
*/
21+
async execute(
22+
template: CreateDatasetTemplateDTO,
23+
collectionIdOrAlias: number | string = ROOT_COLLECTION_ID
24+
): Promise<void> {
25+
return await this.collectionsRepository.createDatasetTemplate(collectionIdOrAlias, template)
26+
}
27+
}

src/collections/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { LinkCollection } from './domain/useCases/LinkCollection'
1616
import { UnlinkCollection } from './domain/useCases/UnlinkCollection'
1717
import { GetCollectionLinks } from './domain/useCases/GetCollectionLinks'
1818
import { GetCollectionsForLinking } from './domain/useCases/GetCollectionsForLinking'
19+
import { CreateDatasetTemplate } from './domain/useCases/CreateDatasetTemplate'
1920

2021
const collectionsRepository = new CollectionsRepository()
2122

@@ -36,6 +37,7 @@ const linkCollection = new LinkCollection(collectionsRepository)
3637
const unlinkCollection = new UnlinkCollection(collectionsRepository)
3738
const getCollectionLinks = new GetCollectionLinks(collectionsRepository)
3839
const getCollectionsForLinking = new GetCollectionsForLinking(collectionsRepository)
40+
const createDatasetTemplate = new CreateDatasetTemplate(collectionsRepository)
3941

4042
export {
4143
getCollection,
@@ -54,7 +56,8 @@ export {
5456
linkCollection,
5557
unlinkCollection,
5658
getCollectionLinks,
57-
getCollectionsForLinking
59+
getCollectionsForLinking,
60+
createDatasetTemplate
5861
}
5962
export { Collection, CollectionInputLevel } from './domain/models/Collection'
6063
export { CollectionFacet } from './domain/models/CollectionFacet'

src/collections/infra/repositories/CollectionsRepository.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import { ReadError } from '../../../core/domain/repositories/ReadError'
4040
import { CollectionLinks } from '../../domain/models/CollectionLinks'
4141
import { CollectionSummary } from '../../domain/models/CollectionSummary'
4242
import { LinkingObjectType } from '../../domain/useCases/GetCollectionsForLinking'
43+
import { CreateDatasetTemplateDTO } from '../../domain/dtos/CreateDatasetTemplateDTO'
4344

4445
export interface NewCollectionRequestPayload {
4546
alias: string
@@ -528,4 +529,18 @@ export class CollectionsRepository extends ApiRepository implements ICollections
528529
throw error
529530
})
530531
}
532+
533+
public async createDatasetTemplate(
534+
collectionIdOrAlias: number | string,
535+
template: CreateDatasetTemplateDTO
536+
): Promise<void> {
537+
return this.doPost(
538+
`/${this.collectionsResourceName}/${collectionIdOrAlias}/templates`,
539+
template
540+
)
541+
.then(() => undefined)
542+
.catch((error) => {
543+
throw error
544+
})
545+
}
531546
}

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: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ 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'
@@ -67,7 +67,11 @@ export interface IDatasetsRepository {
6767
datasetId: number | string,
6868
includeMDC?: boolean
6969
): Promise<DatasetDownloadCount>
70-
getDatasetVersionsSummaries(datasetId: number | string): Promise<DatasetVersionSummaryInfo[]>
70+
getDatasetVersionsSummaries(
71+
datasetId: number | string,
72+
limit?: number,
73+
offset?: number
74+
): Promise<DatasetVersionSummarySubset>
7175
deleteDatasetDraft(datasetId: number | string): Promise<void>
7276
linkDataset(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void>
7377
unlinkDataset(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void>
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
}

0 commit comments

Comments
 (0)