Skip to content

Commit b90d914

Browse files
committed
Merge branch '152-direct-upload-files-use-case' of github.com:IQSS/dataverse-client-javascript into 75-create-collection-use-case
2 parents 7acecf9 + 839d153 commit b90d914

File tree

14 files changed

+40
-35
lines changed

14 files changed

+40
-35
lines changed

docs/useCases.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,7 @@ The `versionUpdateType` parameter can be a [VersionUpdateType](../src/datasets/d
494494

495495
#### Get a File
496496

497-
Returns a [File](../src/files/domain/models/File.ts) instance, given the search parameters to identify it.
497+
Returns a [FileModel](../src/files/domain/models/FileModel.ts) instance, given the search parameters to identify it.
498498

499499
##### Example call:
500500

@@ -506,7 +506,7 @@ import { getFile } from '@iqss/dataverse-client-javascript'
506506
const fileId = 2
507507
const datasetVersionId = '1.0'
508508

509-
getFile.execute(fileId, datasetVersionId).then((file: File) => {
509+
getFile.execute(fileId, datasetVersionId).then((file: FileModel) => {
510510
/* ... */
511511
})
512512

@@ -521,7 +521,7 @@ The optional `datasetVersionId` parameter can correspond to a numeric version id
521521

522522
#### Get a File and its Dataset
523523

524-
Returns a tuple of [File](../src/files/domain/models/File.ts) and [Dataset](../src/datasets/domain/models/Dataset.ts) objects (`[File, Dataset]`), given the search parameters to identify the file.
524+
Returns a tuple of [FileModel](../src/files/domain/models/FileModel.ts) and [Dataset](../src/datasets/domain/models/Dataset.ts) objects (`[FileModel, Dataset]`), given the search parameters to identify the file.
525525

526526
The returned dataset object corresponds to the dataset version associated with the requested file.
527527

@@ -535,7 +535,7 @@ import { getFileAndDataset } from '@iqss/dataverse-client-javascript'
535535
const fileId = 2
536536
const datasetVersionId = '1.0'
537537

538-
getFileAndDataset.execute(fileId, datasetVersionId).then((fileAndDataset: [File, Dataset]) => {
538+
getFileAndDataset.execute(fileId, datasetVersionId).then((fileAndDataset: [FileModel, Dataset]) => {
539539
/* ... */
540540
})
541541

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { DvObjectOwnerNode } from '../../../core/domain/models/DvObjectOwnerNode'
22

3-
export interface File {
3+
export interface FileModel {
44
id: number
55
persistentId: string
66
name: string
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { File } from './File'
1+
import { FileModel } from './FileModel'
22

33
export interface FilesSubset {
4-
files: File[]
4+
files: FileModel[]
55
totalFilesCount: number
66
}

src/files/domain/repositories/IFilesRepository.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { FileUserPermissions } from '../models/FileUserPermissions'
44
import { FileSearchCriteria, FileOrderCriteria } from '../models/FileCriteria'
55
import { FileCounts } from '../models/FileCounts'
66
import { FileDownloadSizeMode } from '../models/FileDownloadSizeMode'
7-
import { File as FileModel } from '../models/File'
7+
import { FileModel } from '../models/FileModel'
88
import { Dataset } from '../../../datasets'
99
import { FileUploadDestination } from '../models/FileUploadDestination'
1010
import { UploadedFileDTO } from '../dtos/UploadedFileDTO'
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
import { IFilesRepository } from '../repositories/IFilesRepository'
2-
import { File } from '../models/File'
2+
import { FileModel } from '../models/FileModel'
33
import { DatasetNotNumberedVersion } from '../../../datasets'
44
import { UseCase } from '../../../core/domain/useCases/UseCase'
55

6-
export class GetFile implements UseCase<File> {
6+
export class GetFile implements UseCase<FileModel> {
77
constructor(private readonly filesRepository: IFilesRepository) {}
88

99
/**
10-
* Returns a File instance, given the search parameters to identify it.
10+
* Returns a FileModel instance, given the search parameters to identify it.
1111
*
1212
* @param {number | string} [fileId] - The File identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
1313
* @param {string | DatasetNotNumberedVersion} [datasetVersionId=DatasetNotNumberedVersion.LATEST] - The dataset version identifier, which can be a version-specific numeric string (for example, 1.0) or a DatasetNotNumberedVersion enum value. If this parameter is not set, the default value is: DatasetNotNumberedVersion.LATEST
14-
* @returns {Promise<File>}
14+
* @returns {Promise<FileModel>}
1515
*/
1616
async execute(
1717
fileId: number | string,
1818
datasetVersionId: string | DatasetNotNumberedVersion = DatasetNotNumberedVersion.LATEST
19-
): Promise<File> {
20-
return (await this.filesRepository.getFile(fileId, datasetVersionId, false)) as File
19+
): Promise<FileModel> {
20+
return (await this.filesRepository.getFile(fileId, datasetVersionId, false)) as FileModel
2121
}
2222
}
Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
11
import { IFilesRepository } from '../repositories/IFilesRepository'
2-
import { File } from '../models/File'
2+
import { FileModel } from '../models/FileModel'
33
import { DatasetNotNumberedVersion, Dataset } from '../../../datasets'
44
import { UseCase } from '../../../core/domain/useCases/UseCase'
55

6-
export class GetFileAndDataset implements UseCase<[File, Dataset]> {
6+
export class GetFileAndDataset implements UseCase<[FileModel, Dataset]> {
77
constructor(private readonly filesRepository: IFilesRepository) {}
88

99
/**
10-
* Returns a tuple including the File instance and the associated Dataset, given the search parameters to identify the File.
10+
* Returns a tuple including the FileModel instance and the associated Dataset, given the search parameters to identify the File.
1111
*
1212
* @param {number | string} [fileId] - The File identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
1313
* @param {string | DatasetNotNumberedVersion} [datasetVersionId=DatasetNotNumberedVersion.LATEST] - The dataset version identifier, which can be a version-specific numeric string (for example, 1.0) or a DatasetNotNumberedVersion enum value. If this parameter is not set, the default value is: DatasetNotNumberedVersion.LATEST
14-
* @returns {Promise<[File, Dataset]>}
14+
* @returns {Promise<[FileModel, Dataset]>}
1515
*/
1616
async execute(
1717
fileId: number | string,
1818
datasetVersionId: string | DatasetNotNumberedVersion = DatasetNotNumberedVersion.LATEST
19-
): Promise<[File, Dataset]> {
20-
return (await this.filesRepository.getFile(fileId, datasetVersionId, true)) as [File, Dataset]
19+
): Promise<[FileModel, Dataset]> {
20+
return (await this.filesRepository.getFile(fileId, datasetVersionId, true)) as [
21+
FileModel,
22+
Dataset
23+
]
2124
}
2225
}

src/files/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export {
4141
addUploadedFileToDataset
4242
}
4343

44-
export { File, FileEmbargo, FileChecksum } from './domain/models/File'
44+
export { FileModel as File, FileEmbargo, FileChecksum } from './domain/models/FileModel'
4545
export { FileUserPermissions } from './domain/models/FileUserPermissions'
4646
export {
4747
FileSearchCriteria,

src/files/infra/clients/DirectUploadClient.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ export class DirectUploadClient implements IDirectUploadClient {
2626
private readonly progressAfterUrlGeneration: number = 10
2727
private readonly progressAfterFileUpload: number = 100
2828

29+
private readonly fileUploadTimeoutMs: number = 60_000
30+
2931
constructor(filesRepository: IFilesRepository, maxMultipartRetries = 5) {
3032
this.filesRepository = filesRepository
3133
this.maxMultipartRetries = maxMultipartRetries
@@ -38,7 +40,7 @@ export class DirectUploadClient implements IDirectUploadClient {
3840
abortController: AbortController,
3941
destination?: FileUploadDestination
4042
): Promise<string> {
41-
if (destination == undefined) {
43+
if (destination === undefined) {
4244
destination = await this.filesRepository
4345
.getFileUploadDestination(datasetId, file)
4446
.catch((error) => {
@@ -71,7 +73,7 @@ export class DirectUploadClient implements IDirectUploadClient {
7173
'Content-Length': file.size.toString(),
7274
'x-amz-tagging': 'dv-state=temp'
7375
},
74-
timeout: 60000,
76+
timeout: this.fileUploadTimeoutMs,
7577
signal: abortController.signal
7678
})
7779
} catch (error) {
@@ -113,12 +115,12 @@ export class DirectUploadClient implements IDirectUploadClient {
113115
},
114116
maxBodyLength: Infinity,
115117
maxContentLength: Infinity,
116-
timeout: 60000,
118+
timeout: this.fileUploadTimeoutMs,
117119
signal: abortController.signal
118120
})
119121
const eTag = response.headers['etag'].replace(/"/g, '')
120122
eTags[`${index + 1}`] = eTag
121-
progress(this.progressAfterUrlGeneration + progressPartSize * (index + 1))
123+
progress(Math.round(this.progressAfterUrlGeneration + progressPartSize * (index + 1)))
122124
} catch (error) {
123125
if (axios.isCancel(error)) {
124126
await this.abortMultipartUpload(file.name, datasetId, destination.abortEndpoint)

src/files/infra/repositories/FilesRepository.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ApiRepository } from '../../../core/infra/repositories/ApiRepository'
22
import { IFilesRepository } from '../../domain/repositories/IFilesRepository'
3-
import { File as FileModel } from '../../domain/models/File'
3+
import { FileModel as FileModel } from '../../domain/models/FileModel'
44
import {
55
transformFileResponseToFile,
66
transformFilesResponseToFilesSubset

src/files/infra/repositories/transformers/fileTransformers.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { File, FileEmbargo, FileChecksum } from '../../../domain/models/File'
1+
import { FileModel, FileEmbargo, FileChecksum } from '../../../domain/models/FileModel'
22
import { AxiosResponse } from 'axios'
33
import { FilesSubset } from '../../../domain/models/FilesSubset'
44
import { Dataset } from '../../../../datasets'
@@ -8,7 +8,7 @@ import { transformPayloadToOwnerNode } from '../../../../core/infra/repositories
88

99
export const transformFilesResponseToFilesSubset = (response: AxiosResponse): FilesSubset => {
1010
const filesPayload = response.data.data
11-
const files: File[] = []
11+
const files: FileModel[] = []
1212
filesPayload.forEach(function (filePayload: FilePayload) {
1313
files.push(transformFilePayloadToFile(filePayload))
1414
})
@@ -22,7 +22,7 @@ export const transformFilesResponseToFilesSubset = (response: AxiosResponse): Fi
2222
export const transformFileResponseToFile = (
2323
response: AxiosResponse,
2424
returnDatasetVersion: boolean
25-
): File | [File, Dataset] => {
25+
): FileModel | [FileModel, Dataset] => {
2626
const filePayload = response.data.data
2727
if (returnDatasetVersion) {
2828
return [
@@ -33,7 +33,7 @@ export const transformFileResponseToFile = (
3333
return transformFilePayloadToFile(filePayload)
3434
}
3535

36-
const transformFilePayloadToFile = (filePayload: FilePayload): File => {
36+
const transformFilePayloadToFile = (filePayload: FilePayload): FileModel => {
3737
return {
3838
id: filePayload.dataFile.id,
3939
persistentId: filePayload.dataFile.persistentId,

0 commit comments

Comments
 (0)