Skip to content

Commit 2f6cd22

Browse files
committed
resolve merge conflicts
2 parents 4d53c52 + 684c2cd commit 2f6cd22

File tree

15 files changed

+622
-25
lines changed

15 files changed

+622
-25
lines changed

docs/useCases.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ The different use cases currently available in the package are classified below,
5252
- [Get the size of Downloading all the files of a Dataset Version](#get-the-size-of-downloading-all-the-files-of-a-dataset-version)
5353
- [Get User Permissions on a File](#get-user-permissions-on-a-file)
5454
- [List Files in a Dataset](#list-files-in-a-dataset)
55+
- [Is File Deleted](#is-file-deleted)
56+
- [Get File Version Summaries](#get-file-version-summaries)
5557
- [Files write use cases](#files-write-use-cases)
5658
- [File Uploading Use Cases](#file-uploading-use-cases)
5759
- [Delete a File](#delete-a-file)
@@ -1571,6 +1573,52 @@ If restrict is false then enableAccessRequest and termsOfAccess are ignored
15711573
If restrict is true and enableAccessRequest is false then termsOfAccess is required.
15721574
The enableAccessRequest and termsOfAccess are applied to the Draft version of the Dataset and affect all of the restricted files in said Draft version.
15731575

1576+
#### Is File Deleted
1577+
1578+
Check if the file has been deleted, return a boolean.
1579+
1580+
##### Example call:
1581+
1582+
```typescript
1583+
import { isFileDeleted } from '@iqss/dataverse-client-javascript'
1584+
1585+
/* ... */
1586+
1587+
const fileId = 12345
1588+
1589+
await isFileDeleted.execute(fileId).then((isDeleted: boolean) => {
1590+
/* ... */
1591+
})
1592+
1593+
/* ... */
1594+
```
1595+
1596+
_See [use case](../src/files/domain/useCases/isFileDeleted.ts) implementation_.
1597+
1598+
The `fileId` parameter can be a string, for persistent identifiers, or a number, for numeric identifiers.
1599+
1600+
#### Get File Version Summaries
1601+
1602+
Get the file versions summaries, return a list of summaries for each version
1603+
1604+
##### Example call:
1605+
1606+
```typescript
1607+
import { getFileVersionSummaries } from '@iqss/dataverse-client-javascript'
1608+
1609+
/* ... */
1610+
1611+
const fileId = 1
1612+
1613+
getFileVersionSummaries.execute(fileId).then((fileVersionSummaries: fileVersionSummaryInfo[]) => {
1614+
/* ... */
1615+
})
1616+
1617+
/* ... */
1618+
```
1619+
1620+
_See [use case](../src/files/domain/useCases/GetFileVersionSummaries.ts) implementation_.
1621+
15741622
## Metadata Blocks
15751623

15761624
### Metadata Blocks read use cases

src/collections/domain/models/CollectionSearchCriteria.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { CollectionItemType } from './CollectionItemType'
22

33
export enum SortType {
44
NAME = 'name',
5-
DATE = 'date'
5+
DATE = 'date',
6+
SCORE = 'score'
67
}
78

89
export enum OrderType {

src/collections/infra/repositories/CollectionsRepository.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -222,10 +222,7 @@ export class CollectionsRepository extends ApiRepository implements ICollections
222222
}
223223

224224
if (searchText) {
225-
queryParams.set(
226-
GetMyDataCollectionItemsQueryParams.SEARCH_TEXT,
227-
encodeURIComponent(searchText)
228-
)
225+
queryParams.set(GetMyDataCollectionItemsQueryParams.SEARCH_TEXT, searchText)
229226
}
230227

231228
roleIds.forEach((roleId) => {
@@ -316,10 +313,7 @@ export class CollectionsRepository extends ApiRepository implements ICollections
316313
collectionSearchCriteria: CollectionSearchCriteria
317314
) {
318315
if (collectionSearchCriteria.searchText) {
319-
queryParams.set(
320-
GetCollectionItemsQueryParams.QUERY,
321-
encodeURIComponent(collectionSearchCriteria.searchText)
322-
)
316+
queryParams.set(GetCollectionItemsQueryParams.QUERY, collectionSearchCriteria.searchText)
323317
}
324318

325319
if (collectionSearchCriteria?.itemTypes) {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { DatasetVersionState } from '../../../datasets/domain/models/Dataset'
2+
3+
export interface FileVersionSummaryInfo {
4+
datasetVersion: string
5+
contributors?: string
6+
publishedDate?: string
7+
fileDifferenceSummary?: FileDifferenceSummary
8+
versionState?: DatasetVersionState
9+
datafileId: number
10+
persistentId?: string
11+
versionNote?: string
12+
}
13+
14+
export type FileDifferenceSummary = {
15+
file?: FileChangeType
16+
fileAccess?: 'Restricted' | 'Unrestricted'
17+
fileMetadata?: FileMetadataChange[]
18+
deaccessionedReason?: string
19+
fileTags?: { [key in FileChangeType]?: number }
20+
}
21+
22+
export type FileChangeType = 'Added' | 'Deleted' | 'Replaced' | 'Changed'
23+
24+
export interface FileMetadataChange {
25+
name: string
26+
action: FileChangeType
27+
}

src/files/domain/repositories/IFilesRepository.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { FileUploadDestination } from '../models/FileUploadDestination'
1010
import { UploadedFileDTO } from '../dtos/UploadedFileDTO'
1111
import { UpdateFileMetadataDTO } from '../dtos/UpdateFileMetadataDTO'
1212
import { RestrictFileDTO } from '../dtos/RestrictFileDTO'
13+
import { FileVersionSummaryInfo } from '../models/FileVersionSummaryInfo'
1314

1415
export interface IFilesRepository {
1516
getDatasetFiles(
@@ -84,4 +85,8 @@ export interface IFilesRepository {
8485
categories: string[],
8586
replace?: boolean
8687
): Promise<void>
88+
89+
getFileVersionSummaries(fileId: number | string): Promise<FileVersionSummaryInfo[]>
90+
91+
isFileDeleted(fileId: number | string): Promise<boolean>
8792
}
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 { FileVersionSummaryInfo } from '../models/FileVersionSummaryInfo'
3+
import { IFilesRepository } from '../repositories/IFilesRepository'
4+
5+
export class GetFileVersionSummaries implements UseCase<FileVersionSummaryInfo[]> {
6+
private filesRepository: IFilesRepository
7+
8+
constructor(filesRepository: IFilesRepository) {
9+
this.filesRepository = filesRepository
10+
}
11+
12+
/**
13+
* Returns a list of versions for a given file including a summary of differences between consecutive versions
14+
*
15+
* @param {number | string} [fileId] - The file identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
16+
* @returns {Promise<FileVersionSummaryInfo[]>} - An array of FileVersionSummaryInfo.
17+
*/
18+
async execute(fileId: number | string): Promise<FileVersionSummaryInfo[]> {
19+
return await this.filesRepository.getFileVersionSummaries(fileId)
20+
}
21+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { IFilesRepository } from '../repositories/IFilesRepository'
2+
import { UseCase } from '../../../core/domain/useCases/UseCase'
3+
4+
export class IsFileDeleted implements UseCase<boolean> {
5+
constructor(private readonly filesRepository: IFilesRepository) {}
6+
7+
/**
8+
* Returns a boolean, indicating whether the file has been deleted or not.
9+
*
10+
* @param {number | string} [fileId] - The File identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
11+
* @returns {Promise<boolean>} - A boolean indicating whether the file has been deleted or not.
12+
*/
13+
async execute(fileId: number | string): Promise<boolean> {
14+
return await this.filesRepository.isFileDeleted(fileId)
15+
}
16+
}

src/files/index.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import { RestrictFile } from './domain/useCases/RestrictFile'
1717
import { UpdateFileMetadata } from './domain/useCases/UpdateFileMetadata'
1818
import { UpdateFileTabularTags } from './domain/useCases/UpdateFileTabularTags'
1919
import { UpdateFileCategories } from './domain/useCases/UpdateFileCategories'
20+
import { GetFileVersionSummaries } from './domain/useCases/GetFileVersionSummaries'
21+
import { IsFileDeleted } from './domain/useCases/IsFileDeleted'
2022

2123
const filesRepository = new FilesRepository()
2224
const directUploadClient = new DirectUploadClient(filesRepository)
@@ -38,6 +40,8 @@ const restrictFile = new RestrictFile(filesRepository)
3840
const updateFileMetadata = new UpdateFileMetadata(filesRepository)
3941
const updateFileTabularTags = new UpdateFileTabularTags(filesRepository)
4042
const updateFileCategories = new UpdateFileCategories(filesRepository)
43+
const getFileVersionSummaries = new GetFileVersionSummaries(filesRepository)
44+
const isFileDeleted = new IsFileDeleted(filesRepository)
4145

4246
export {
4347
getDatasetFiles,
@@ -56,7 +60,9 @@ export {
5660
updateFileMetadata,
5761
updateFileTabularTags,
5862
updateFileCategories,
59-
replaceFile
63+
replaceFile,
64+
getFileVersionSummaries,
65+
isFileDeleted
6066
}
6167

6268
export { FileModel as File, FileEmbargo, FileChecksum } from './domain/models/FileModel'

src/files/infra/repositories/FilesRepository.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import { UploadedFileDTO } from '../../domain/dtos/UploadedFileDTO'
2222
import { UpdateFileMetadataDTO } from '../../domain/dtos/UpdateFileMetadataDTO'
2323
import { ApiConstants } from '../../../core/infra/repositories/ApiConstants'
2424
import { RestrictFileDTO } from '../../domain/dtos/RestrictFileDTO'
25+
import { FileVersionSummaryInfo } from '../../domain/models/FileVersionSummaryInfo'
26+
import { transformFileVersionSummaryInfoResponseToFileVersionSummaryInfo } from './transformers/fileVersionSummaryInfoTransformers'
2527

2628
export interface GetFilesQueryParams {
2729
includeDeaccessioned: boolean
@@ -415,4 +417,23 @@ export class FilesRepository extends ApiRepository implements IFilesRepository {
415417
throw error
416418
})
417419
}
420+
421+
public async getFileVersionSummaries(fileId: number | string): Promise<FileVersionSummaryInfo[]> {
422+
return this.doGet(
423+
this.buildApiEndpoint(this.filesResourceName, 'versionDifferences', fileId),
424+
true
425+
)
426+
.then((response) => transformFileVersionSummaryInfoResponseToFileVersionSummaryInfo(response))
427+
.catch((error) => {
428+
throw error
429+
})
430+
}
431+
432+
public async isFileDeleted(fileId: number | string): Promise<boolean> {
433+
return this.doGet(this.buildApiEndpoint(this.filesResourceName, 'hasBeenDeleted', fileId), true)
434+
.then((response) => response.data.data)
435+
.catch((error) => {
436+
throw error
437+
})
438+
}
418439
}
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 transformFileVersionSummaryInfoResponseToFileVersionSummaryInfo = (
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+
}

0 commit comments

Comments
 (0)