Skip to content

Commit ac44d47

Browse files
committed
feat: repositories and models
1 parent 3446807 commit ac44d47

File tree

6 files changed

+157
-3
lines changed

6 files changed

+157
-3
lines changed
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
export interface DatasetVersionSummary {
2+
id: number
3+
versionNumber: string
4+
summary?: Summary | SummaryStringValues
5+
contributors: string
6+
publishedOn?: string
7+
}
8+
9+
export type Summary = {
10+
[key: string]: SummaryUpdates | SummaryUpdatesWithFields | FilesSummaryUpdates | boolean
11+
}
12+
13+
export interface SummaryUpdates {
14+
added: string // deberia ser number chequear
15+
deleted: string
16+
changed: string
17+
}
18+
19+
export interface SummaryUpdatesWithFields {
20+
[key: string]: SummaryUpdates
21+
}
22+
23+
export interface FilesSummaryUpdates {
24+
added: number
25+
removed: number
26+
replaced: number
27+
changedFileMetaData: number
28+
changedVariableMetadata: number
29+
}
30+
31+
export enum SummaryStringValues {
32+
firstPublished = 'firstPublished',
33+
firstDraft = 'firstDraft',
34+
versionDeaccessioned = 'versionDeaccessioned',
35+
previousVersionDeaccessioned = 'previousVersionDeaccessioned'
36+
}
37+
38+
export enum SummaryKnownFields {
39+
files = 'files',
40+
termsAccessChanged = 'termsAccessChanged'
41+
}
42+
43+
// SummaryUpdates Example:
44+
/*
45+
summary: {
46+
"Geospatial Metadata": {
47+
added: 1,
48+
deleted: 0,
49+
changed: 0
50+
},
51+
}
52+
*/
53+
54+
// SummaryUpdatesWithFields Example:
55+
/*
56+
summary: {
57+
'Citation Metadata': {
58+
Description: {
59+
added: 0,
60+
deleted: 0,
61+
changed: 1
62+
},
63+
Title: {
64+
added: 0,
65+
deleted: 0,
66+
changed: 1
67+
}
68+
}
69+
}
70+
*/
71+
72+
// FilesSummaryUpdates Example:
73+
/*
74+
summary: {
75+
files: {
76+
added: 1,
77+
removed: 0,
78+
replaced: 0,
79+
changedFileMetaData: 2,
80+
changedVariableMetadata: 0
81+
},
82+
}
83+
*/
84+
85+
const version: DatasetVersionSummary = {
86+
id: 1,
87+
versionNumber: '1.0',
88+
contributors: 'John Doe',
89+
publishedOn: '2021-06-01',
90+
summary: {
91+
files: {
92+
added: 1,
93+
changedFileMetaData: 2,
94+
removed: 0,
95+
replaced: 0,
96+
changedVariableMetadata: 0
97+
},
98+
'Citation Metadata': {
99+
Title: {
100+
added: '0',
101+
deleted: '0',
102+
changed: '1'
103+
}
104+
},
105+
termsAccessChanged: true
106+
}
107+
}
108+
109+
console.log({
110+
typeof: typeof (
111+
(version.summary as Summary)?.['Citation Metadata'] as SummaryUpdatesWithFields
112+
)?.['Title'].changed
113+
})
114+
115+
// console.log({ typeof: typeof (version.summary as SummaryChanges)?.['Title'].changed })

src/datasets/domain/repositories/IDatasetsRepository.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { DatasetDTO } from '../dtos/DatasetDTO'
77
import { DatasetDeaccessionDTO } from '../dtos/DatasetDeaccessionDTO'
88
import { MetadataBlock } from '../../../metadataBlocks'
99
import { DatasetVersionDiff } from '../models/DatasetVersionDiff'
10+
import { DatasetVersionSummary } from '../models/DatasetVersionSummary'
1011

1112
export interface IDatasetsRepository {
1213
getDataset(
@@ -51,4 +52,5 @@ export interface IDatasetsRepository {
5152
datasetVersionId: string,
5253
deaccessionDTO: DatasetDeaccessionDTO
5354
): Promise<void>
55+
getDatasetVersions(datasetId: number | string): Promise<DatasetVersionSummary[]>
5456
}
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 { DatasetVersionSummary } from '../models/DatasetVersionSummary'
3+
import { IDatasetsRepository } from '../repositories/IDatasetsRepository'
4+
5+
export class GetDatasetVersions implements UseCase<DatasetVersionSummary[]> {
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 a summary of differences between consecutive versions where available.
14+
* Draft versions will only be available to users who have permission to view unpublished drafts.
15+
* @param {number | string} [datasetId] - The dataset identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
16+
* @returns {Promise<DatasetVersionSummary[]>} - An array of DatasetVersionSummary.
17+
*/
18+
async execute(datasetId: number | string): Promise<DatasetVersionSummary[]> {
19+
return await this.datasetsRepository.getDatasetVersions(datasetId)
20+
}
21+
}

src/datasets/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { PublishDataset } from './domain/useCases/PublishDataset'
1717
import { UpdateDataset } from './domain/useCases/UpdateDataset'
1818
import { GetDatasetVersionDiff } from './domain/useCases/GetDatasetVersionDiff'
1919
import { DeaccessionDataset } from './domain/useCases/DeaccessionDataset'
20+
import { GetDatasetVersions } from './domain/useCases/GetDatasetVersions'
2021

2122
const datasetsRepository = new DatasetsRepository()
2223

@@ -48,6 +49,7 @@ const updateDataset = new UpdateDataset(
4849
datasetResourceValidator
4950
)
5051
const deaccessionDataset = new DeaccessionDataset(datasetsRepository)
52+
const getDatasetVersions = new GetDatasetVersions(datasetsRepository)
5153

5254
export {
5355
getDataset,
@@ -62,7 +64,8 @@ export {
6264
publishDataset,
6365
createDataset,
6466
updateDataset,
65-
deaccessionDataset
67+
deaccessionDataset,
68+
getDatasetVersions
6669
}
6770
export { DatasetNotNumberedVersion } from './domain/models/DatasetNotNumberedVersion'
6871
export { DatasetUserPermissions } from './domain/models/DatasetUserPermissions'

src/datasets/infra/repositories/DatasetsRepository.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { transformDatasetLocksResponseToDatasetLocks } from './transformers/data
1818
import { transformDatasetPreviewsResponseToDatasetPreviewSubset } from './transformers/datasetPreviewsTransformers'
1919
import { DatasetVersionDiff } from '../../domain/models/DatasetVersionDiff'
2020
import { transformDatasetVersionDiffResponseToDatasetVersionDiff } from './transformers/datasetVersionDiffTransformers'
21+
import { DatasetVersionSummary } from '../../domain/models/DatasetVersionSummary'
2122

2223
export interface GetAllDatasetPreviewsQueryParams {
2324
per_page?: number
@@ -162,6 +163,7 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
162163
throw error
163164
})
164165
}
166+
165167
public async createDataset(
166168
newDataset: DatasetDTO,
167169
datasetMetadataBlocks: MetadataBlock[],
@@ -234,4 +236,15 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
234236
throw error
235237
})
236238
}
239+
240+
public async getDatasetVersions(datasetId: string | number): Promise<DatasetVersionSummary[]> {
241+
return this.doGet(
242+
this.buildApiEndpoint(this.datasetsResourceName, 'versions/compareSummary', datasetId),
243+
true
244+
)
245+
.then((response) => response.data.data)
246+
.catch((error) => {
247+
throw error
248+
})
249+
}
237250
}

test/environment/.env

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
POSTGRES_VERSION=13
22
DATAVERSE_DB_USER=dataverse
33
SOLR_VERSION=9.3.0
4-
DATAVERSE_IMAGE_REGISTRY=docker.io
5-
DATAVERSE_IMAGE_TAG=unstable
4+
DATAVERSE_IMAGE_REGISTRY=ghcr.io
5+
DATAVERSE_IMAGE_TAG=11188-version-difference-summary
66
DATAVERSE_BOOTSTRAP_TIMEOUT=5m

0 commit comments

Comments
 (0)