Skip to content

Commit f906ca4

Browse files
committed
feat: add use case for getting dataset versions
1 parent a937365 commit f906ca4

5 files changed

Lines changed: 115 additions & 0 deletions

File tree

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { DatasetLicense, DatasetMetadataBlocks, DatasetVersionState } from "./Dataset";
2+
import { FilePayload } from "../../../files/infra/repositories/transformers/FilePayload";
3+
4+
export interface DatasetVersion {
5+
id: number
6+
datasetId: number
7+
datasetPersistentId: string
8+
alternativePersistentId?: string
9+
datasetType: string
10+
storageIdentifier: string
11+
versionNumber?: number
12+
versionMinorNumber?: number
13+
internalVersionNumber: number
14+
versionState: DatasetVersionState
15+
isInReviewState: boolean
16+
latestVersionPublishingState: DatasetVersionState
17+
lastUpdateTime: string
18+
releaseTime?: string
19+
createTime: string
20+
publicationDate: string
21+
citationDate: string
22+
license: DatasetLicense
23+
fileAccessRequest: boolean
24+
files?: Array<FilePayload>
25+
metadataBlocks?: DatasetMetadataBlocks
26+
}
27+
28+
export interface DatasetVersionSubset {
29+
versions: DatasetVersion[]
30+
totalCount: number
31+
}

src/datasets/domain/repositories/IDatasetsRepository.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { MetadataBlock } from '../../../metadataBlocks'
99
import { DatasetVersionDiff } from '../models/DatasetVersionDiff'
1010
import { DatasetDownloadCount } from '../models/DatasetDownloadCount'
1111
import { DatasetVersionSummarySubset } from '../models/DatasetVersionSummaryInfo'
12+
import { DatasetVersionSubset } from '../models/DatasetVersion'
1213
import { DatasetLinkedCollection } from '../models/DatasetLinkedCollection'
1314
import { CitationFormat } from '../models/CitationFormat'
1415
import { FormattedCitation } from '../models/FormattedCitation'
@@ -73,6 +74,13 @@ export interface IDatasetsRepository {
7374
limit?: number,
7475
offset?: number
7576
): Promise<DatasetVersionSummarySubset>
77+
getDatasetVersions(
78+
datasetId: number | string,
79+
limit?: number,
80+
offset?: number,
81+
excludeMetadataBlocks?: boolean,
82+
excludeFiles?: boolean
83+
): Promise<DatasetVersionSubset>
7684
deleteDatasetDraft(datasetId: number | string): Promise<void>
7785
linkDataset(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void>
7886
unlinkDataset(datasetId: number | string, collectionIdOrAlias: number | string): Promise<void>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { DatasetVersionSubset } from '../models/DatasetVersion'
3+
import { IDatasetsRepository } from '../repositories/IDatasetsRepository'
4+
5+
export class GetDatasetVersions implements UseCase<DatasetVersionSubset> {
6+
private datasetsRepository: IDatasetsRepository
7+
8+
constructor(datasetsRepository: IDatasetsRepository) {
9+
this.datasetsRepository = datasetsRepository
10+
}
11+
12+
/**
13+
* Returns a list of versions for a given dataset including (optionally) metadata blocks and files.
14+
* Draft versions will only be available to users who have permission to view unpublished drafts.
15+
*
16+
* @param {number | string} [datasetId] - The dataset identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
17+
* @param {number} [limit] - Limit for pagination (optional).
18+
* @param {number} [offset] - Offset for pagination (optional).
19+
* @param {boolean} [excludeMetadataBlocks] - Exclude metadata blocks (optional, default: false).
20+
* @param {boolean} [excludeFiles] - Exclude files (optional, default: true).
21+
* @returns {Promise<DatasetVersionSubset>} - A DatasetVersionSubset containing the versions and total count.
22+
*/
23+
async execute(
24+
datasetId: number | string,
25+
limit?: number,
26+
offset?: number,
27+
excludeMetadataBlocks?: boolean,
28+
excludeFiles?: boolean
29+
): Promise<DatasetVersionSubset> {
30+
return await this.datasetsRepository.getDatasetVersions(datasetId, limit, offset, excludeMetadataBlocks, excludeFiles)
31+
}
32+
}

src/datasets/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { GetDatasetVersionDiff } from './domain/useCases/GetDatasetVersionDiff'
1919
import { DeaccessionDataset } from './domain/useCases/DeaccessionDataset'
2020
import { GetDatasetDownloadCount } from './domain/useCases/GetDatasetDownloadCount'
2121
import { GetDatasetVersionsSummaries } from './domain/useCases/GetDatasetVersionsSummaries'
22+
import { GetDatasetVersions } from './domain/useCases/GetDatasetVersions'
2223
import { DeleteDatasetDraft } from './domain/useCases/DeleteDatasetDraft'
2324
import { LinkDataset } from './domain/useCases/LinkDataset'
2425
import { UnlinkDataset } from './domain/useCases/UnlinkDataset'
@@ -67,6 +68,7 @@ const updateDataset = new UpdateDataset(
6768
const deaccessionDataset = new DeaccessionDataset(datasetsRepository)
6869
const getDatasetDownloadCount = new GetDatasetDownloadCount(datasetsRepository)
6970
const getDatasetVersionsSummaries = new GetDatasetVersionsSummaries(datasetsRepository)
71+
const getDatasetVersions = new GetDatasetVersions(datasetsRepository)
7072
const deleteDatasetDraft = new DeleteDatasetDraft(datasetsRepository)
7173
const linkDataset = new LinkDataset(datasetsRepository)
7274
const unlinkDataset = new UnlinkDataset(datasetsRepository)
@@ -101,6 +103,7 @@ export {
101103
deaccessionDataset,
102104
getDatasetDownloadCount,
103105
getDatasetVersionsSummaries,
106+
getDatasetVersions,
104107
deleteDatasetDraft,
105108
linkDataset,
106109
unlinkDataset,
@@ -133,6 +136,7 @@ export {
133136
TermsOfUse
134137
} from './domain/models/Dataset'
135138
export { DatasetPreview } from './domain/models/DatasetPreview'
139+
export { DatasetVersion } from './domain/models/DatasetVersion'
136140
export { DatasetVersionDiff } from './domain/models/DatasetVersionDiff'
137141
export { DatasetPreviewSubset } from './domain/models/DatasetPreviewSubset'
138142
export {

src/datasets/infra/repositories/DatasetsRepository.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { DatasetVersionDiff } from '../../domain/models/DatasetVersionDiff'
2121
import { transformDatasetVersionDiffResponseToDatasetVersionDiff } from './transformers/datasetVersionDiffTransformers'
2222
import { DatasetDownloadCount } from '../../domain/models/DatasetDownloadCount'
2323
import { DatasetVersionSummarySubset } from '../../domain/models/DatasetVersionSummaryInfo'
24+
import { DatasetVersionSubset } from '../../domain/models/DatasetVersion'
2425
import { DatasetLinkedCollection } from '../../domain/models/DatasetLinkedCollection'
2526
import { CitationFormat } from '../../domain/models/CitationFormat'
2627
import { transformDatasetLinkedCollectionsResponseToDatasetLinkedCollection } from './transformers/datasetLinkedCollectionsTransformers'
@@ -337,6 +338,45 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
337338
})
338339
}
339340

341+
public async getDatasetVersions(
342+
datasetId: string | number,
343+
limit?: number,
344+
offset?: number,
345+
excludeMetadataBlocks?: boolean,
346+
excludeFiles?: boolean
347+
): Promise<DatasetVersionSubset> {
348+
const queryParams = new URLSearchParams()
349+
350+
if (limit) {
351+
queryParams.set('limit', limit.toString())
352+
}
353+
354+
if (offset) {
355+
queryParams.set('offset', offset.toString())
356+
}
357+
358+
if (excludeMetadataBlocks !== undefined) {
359+
queryParams.set('excludeMetadataBlocks', excludeMetadataBlocks.toString())
360+
}
361+
362+
if (excludeFiles !== undefined) {
363+
queryParams.set('excludeFiles', excludeFiles.toString())
364+
}
365+
366+
return this.doGet(
367+
this.buildApiEndpoint(this.datasetsResourceName, 'versions', datasetId),
368+
true,
369+
queryParams
370+
)
371+
.then((response) => ({
372+
versions: response.data.data,
373+
totalCount: response.data.totalCount
374+
}))
375+
.catch((error) => {
376+
throw error
377+
})
378+
}
379+
340380
public async deleteDatasetDraft(datasetId: string | number): Promise<void> {
341381
return this.doDelete(
342382
this.buildApiEndpoint(this.datasetsResourceName, 'versions/:draft', datasetId)

0 commit comments

Comments
 (0)