Skip to content

Commit 4d5d58c

Browse files
committed
feat: add a transformer to better arrange the data model
1 parent 526e1cc commit 4d5d58c

File tree

6 files changed

+118
-100
lines changed

6 files changed

+118
-100
lines changed

src/files/domain/models/FileVersionSummaryInfo.ts

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,26 @@
1+
import { DatasetVersionState } from '../../../datasets/domain/models/Dataset'
2+
import { FileAccessStatus } from '../../../files/domain/models/FileCriteria'
3+
14
export interface FileVersionSummaryInfo {
25
datasetVersion: string
3-
versionNumber?: number
4-
versionMinorNumber?: number
56
contributors?: string
67
publishedDate?: string
78
fileDifferenceSummary?: FileDifferenceSummary
8-
isDraft: boolean
9-
isDeaccessioned: boolean
10-
isReleased: boolean
11-
versionState?: FileVersionState
9+
versionState?: DatasetVersionState
1210
datafileId: number
1311
persistentId?: string
1412
versionNote?: string
1513
}
1614

17-
export enum FileVersionState {
18-
RELEASED = 'RELEASED',
19-
DEACCESSIONED = 'DEACCESSIONED',
20-
DRAFT = 'DRAFT'
21-
}
22-
2315
export type FileDifferenceSummary = {
2416
file?: FileChangeType
25-
FileAccess?: FileAccessChangeType
26-
FileMetadata?: FileMetadataChange[]
17+
fileAccess?: FileAccessStatus
18+
fileMetadata?: FileMetadataChange[]
2719
deaccessionedReason?: string
28-
FileTags?: FileTagChange
20+
fileTags?: { [key in FileChangeType]?: number }
2921
}
3022

3123
export type FileChangeType = 'Added' | 'Deleted' | 'Replaced' | 'Changed'
32-
export type FileAccessChangeType = 'Restricted' | 'Public'
33-
34-
export type FileTagChange = {
35-
Added?: number
36-
Deleted?: number
37-
Changed?: number
38-
}
3924

4025
export interface FileMetadataChange {
4126
name: string

src/files/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export {
6161
updateFileTabularTags,
6262
updateFileCategories,
6363
replaceFile,
64-
getFileVersionSummaries
64+
getFileVersionSummaries,
6565
isFileDeleted
6666
}
6767

src/files/infra/repositories/FilesRepository.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { UpdateFileMetadataDTO } from '../../domain/dtos/UpdateFileMetadataDTO'
2323
import { ApiConstants } from '../../../core/infra/repositories/ApiConstants'
2424
import { RestrictFileDTO } from '../../domain/dtos/RestrictFileDTO'
2525
import { FileVersionSummaryInfo } from '../../domain/models/FileVersionSummaryInfo'
26+
import { FileVersionSummaryInfoTransformers } from './transformers/fileVersionSummaryInfoTransformers'
2627

2728
export interface GetFilesQueryParams {
2829
includeDeaccessioned: boolean
@@ -422,7 +423,7 @@ export class FilesRepository extends ApiRepository implements IFilesRepository {
422423
this.buildApiEndpoint(this.filesResourceName, 'versionDifferences', fileId),
423424
true
424425
)
425-
.then((response) => response.data.data)
426+
.then((response) => FileVersionSummaryInfoTransformers(response.data.data))
426427
.catch((error) => {
427428
throw error
428429
})
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { AxiosResponse } from 'axios'
2+
import {
3+
FileVersionSummaryInfo,
4+
FileMetadataChange,
5+
FileDifferenceSummary
6+
} from '../../../domain/models/FileVersionSummaryInfo'
7+
import { DatasetVersionState } from '../../../../datasets/domain/models/Dataset'
8+
9+
export interface FileVersionSummaryInfoPayload {
10+
datasetVersion: string
11+
contributors?: string
12+
publishedDate?: string
13+
fileDifferenceSummary?: {
14+
file?: string
15+
FileAccess?: string
16+
FileMetadata?: FileMetadataChange[]
17+
deaccessionedReason?: string
18+
FileTags?: {
19+
Added?: number
20+
Deleted?: number
21+
Changed?: number
22+
}
23+
}
24+
versionState?: DatasetVersionState
25+
datafileId: number
26+
persistentId?: string
27+
versionNote?: string
28+
}
29+
30+
export const FileVersionSummaryInfoTransformers = (
31+
response: AxiosResponse
32+
): FileVersionSummaryInfo[] => {
33+
const payload = response.data.data
34+
35+
return payload.map((item: FileVersionSummaryInfoPayload): FileVersionSummaryInfo => {
36+
const summary = item.fileDifferenceSummary || {}
37+
38+
const fileDifferenceSummary: FileDifferenceSummary = {
39+
...(summary.file && { file: summary.file }),
40+
...(summary.FileAccess && { fileAccess: summary.FileAccess }),
41+
...(summary.FileMetadata && { fileMetadata: summary.FileMetadata }),
42+
...(summary.deaccessionedReason && { deaccessionedReason: summary.deaccessionedReason }),
43+
...(summary.FileTags && { fileTags: summary.FileTags })
44+
} as FileDifferenceSummary
45+
46+
return {
47+
datasetVersion: item.datasetVersion,
48+
contributors: item.contributors,
49+
publishedDate: item.publishedDate,
50+
fileDifferenceSummary: fileDifferenceSummary,
51+
versionState: item.versionState,
52+
datafileId: item.datafileId,
53+
persistentId: item.persistentId,
54+
versionNote: item.versionNote
55+
}
56+
})
57+
}

test/integration/files/FilesRepository.test.ts

Lines changed: 50 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,8 @@ import {
4545
} from '../../testHelpers/collections/collectionHelper'
4646
import { RestrictFileDTO } from '../../../src/files/domain/dtos/RestrictFileDTO'
4747
import { DatasetsRepository } from '../../../src/datasets/infra/repositories/DatasetsRepository'
48-
import {
49-
FileVersionState,
50-
FileVersionSummaryInfo
51-
} from '../../../src/files/domain/models/FileVersionSummaryInfo'
48+
import { FileVersionSummaryInfo } from '../../../src/files/domain/models/FileVersionSummaryInfo'
49+
import { DatasetVersionState } from '../../../src/datasets'
5250
import { DirectUploadClient } from '../../../src/files/infra/clients/DirectUploadClient'
5351

5452
describe('FilesRepository', () => {
@@ -795,14 +793,10 @@ describe('FilesRepository', () => {
795793

796794
const fileSummmaries: FileVersionSummaryInfo = {
797795
datasetVersion: 'DRAFT',
798-
isDraft: true,
799-
isReleased: false,
800-
isDeaccessioned: false,
801-
versionState: FileVersionState.DRAFT,
796+
versionState: DatasetVersionState.DRAFT,
802797
contributors: 'Dataverse Admin',
803798
datafileId: testFile.id,
804799
persistentId: testFile.persistentId,
805-
// publishedDate: '', Uncomment this line until the API is fixed
806800
fileDifferenceSummary: { file: 'Added' }
807801
}
808802

@@ -829,50 +823,40 @@ describe('FilesRepository', () => {
829823
const testFile = datasetFiles.files[0]
830824
const publishedFileVersionSummariesActual = await sut.getFileVersionSummaries(testFile.id)
831825

832-
// const publishedFileVersionSummmaries: FileVersionSummaryInfo = {
833-
// datasetVersion: '1.0',
834-
// isDraft: false,
835-
// isReleased: true,
836-
// isDeaccessioned: false,
837-
// versionNumber: 1,
838-
// versionMinorNumber: 0,
839-
// publishedDate: new Date().toISOString().split('T')[0], // Format: yyyy-mm-dd
840-
// versionState: FileVersionState.RELEASED,
841-
// contributors: 'Dataverse Admin',
842-
// datafileId: testFile.id,
843-
// persistentId: testFile.persistentId,
844-
// fileDifferenceSummary: { file: 'Added' }
845-
// }
826+
const publishedFileVersionSummmaries: FileVersionSummaryInfo = {
827+
datasetVersion: '1.0',
828+
publishedDate: publishedFileVersionSummariesActual[0].publishedDate,
829+
versionState: DatasetVersionState.RELEASED,
830+
contributors: 'Dataverse Admin',
831+
datafileId: testFile.id,
832+
persistentId: testFile.persistentId,
833+
fileDifferenceSummary: { file: 'Added' }
834+
}
846835

847836
expect(publishedFileVersionSummariesActual).toHaveLength(1)
848-
// expect(publishedFileVersionSummariesActual[0]).toEqual(publishedFileVersionSummmaries) Uncomment this line until the API is fixed
837+
expect(publishedFileVersionSummariesActual[0]).toEqual(publishedFileVersionSummmaries)
849838

850839
await deaccessionDatasetViaApi(fileTestDatasetIds.numericId, '1.0').catch(() => {
851840
throw new Error('Error while deaccessioning test Dataset')
852841
})
853842

854843
const actual = await sut.getFileVersionSummaries(testFile.id)
855844

856-
// const fileSummmaries: FileVersionSummaryInfo = {
857-
// datasetVersion: '1.0',
858-
// versionNumber: 1,
859-
// versionMinorNumber: 0,
860-
// publishedDate: new Date().toISOString().split('T')[0],
861-
// isDraft: false,
862-
// isReleased: false,
863-
// isDeaccessioned: true,
864-
// versionState: FileVersionState.DEACCESSIONED,
865-
// contributors: 'Dataverse Admin',
866-
// datafileId: testFile.id,
867-
// persistentId: testFile.persistentId,
868-
// fileDifferenceSummary: {
869-
// deaccessionedReason: 'Test reason.',
870-
// file: 'Added'
871-
// }
872-
// }
845+
const fileSummmaries: FileVersionSummaryInfo = {
846+
datasetVersion: '1.0',
847+
publishedDate: publishedFileVersionSummariesActual[0].publishedDate,
848+
versionState: DatasetVersionState.DEACCESSIONED,
849+
contributors: 'Dataverse Admin',
850+
datafileId: testFile.id,
851+
persistentId: testFile.persistentId,
852+
fileDifferenceSummary: {
853+
deaccessionedReason: 'Test reason.',
854+
file: 'Added'
855+
}
856+
}
873857

874858
expect(actual).toHaveLength(1)
875-
// expect(actual[0]).toEqual(fileSummmaries) Uncomment this line until the API is fixed
859+
expect(actual[0]).toEqual(fileSummmaries)
876860
deletePublishedDatasetViaApi(fileTestDatasetIds.persistentId)
877861
})
878862

@@ -904,36 +888,32 @@ describe('FilesRepository', () => {
904888
restrict: true
905889
})
906890
const updatedFileVersionSummariesActual = await sut.getFileVersionSummaries(testFile.id)
907-
// const updatedFileVersionSummaries: FileVersionSummaryInfo = {
908-
// datasetVersion: 'DRAFT',
909-
// publishedDate: '',
910-
// isDraft: true,
911-
// isReleased: false,
912-
// isDeaccessioned: false,
913-
// versionState: FileVersionState.DRAFT,
914-
// contributors: 'Dataverse Admin',
915-
// datafileId: testFile.id,
916-
// persistentId: testFile.persistentId,
917-
// fileDifferenceSummary: {
918-
// FileMetadata: [
919-
// {
920-
// name: 'File Name',
921-
// action: 'Changed'
922-
// },
923-
// {
924-
// name: 'Description',
925-
// action: 'Changed'
926-
// }
927-
// ],
928-
// FileTags: {
929-
// Added: 2
930-
// },
931-
// FileAccess: 'Restricted'
932-
// }
933-
// }
891+
const updatedFileVersionSummaries: FileVersionSummaryInfo = {
892+
datasetVersion: 'DRAFT',
893+
versionState: DatasetVersionState.DRAFT,
894+
contributors: 'Dataverse Admin',
895+
datafileId: testFile.id,
896+
persistentId: testFile.persistentId,
897+
fileDifferenceSummary: {
898+
fileMetadata: [
899+
{
900+
name: 'File Name',
901+
action: 'Changed'
902+
},
903+
{
904+
name: 'Description',
905+
action: 'Changed'
906+
}
907+
],
908+
fileTags: {
909+
Added: 2
910+
},
911+
fileAccess: FileAccessStatus.RESTRICTED
912+
}
913+
}
934914

935915
expect(updatedFileVersionSummariesActual).toHaveLength(2)
936-
// expect(updatedFileVersionSummariesActual[0]).toEqual(updatedFileVersionSummaries) Uncomment this line until the API is fixed
916+
expect(updatedFileVersionSummariesActual[0]).toEqual(updatedFileVersionSummaries)
937917
deletePublishedDatasetViaApi(fileTestDatasetIds.persistentId)
938918
})
939919

test/unit/files/GetFileVersionSummaries.test.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,16 @@ describe('execute', () => {
99
const fileVersionSummaries: FileVersionSummaryInfo[] = [
1010
{
1111
datasetVersion: '1.0',
12-
versionNumber: 1,
13-
versionMinorNumber: 0,
1412
contributors: 'John Doe',
1513
publishedDate: '2023-01-01',
1614
fileDifferenceSummary: {
17-
FileMetadata: [
15+
fileMetadata: [
1816
{
1917
name: 'file.txt',
2018
action: 'Added'
2119
}
2220
]
2321
},
24-
isDraft: false,
25-
isDeaccessioned: false,
26-
isReleased: false,
2722
datafileId: 1
2823
}
2924
]

0 commit comments

Comments
 (0)