Skip to content

Commit fc47b51

Browse files
committed
feat: add internalVersionNumber to update dataset use case
1 parent 3b295fb commit fc47b51

3 files changed

Lines changed: 22 additions & 5 deletions

File tree

src/datasets/domain/repositories/IDatasetsRepository.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ export interface IDatasetsRepository {
4545
updateDataset(
4646
datasetId: number | string,
4747
dataset: DatasetDTO,
48-
datasetMetadataBlocks: MetadataBlock[]
48+
datasetMetadataBlocks: MetadataBlock[],
49+
internalVersionNumber?: number
4950
): Promise<void>
5051
deaccessionDataset(
5152
datasetId: number | string,

src/datasets/domain/useCases/UpdateDataset.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,24 @@ export class UpdateDataset extends DatasetWriteUseCase<void> {
1818
*
1919
* @param {number | string} [datasetId] - The dataset identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
2020
* @param {DatasetDTO} [updatedDataset] - DatasetDTO object including the updated dataset metadata field values for each metadata block.
21+
* @param {number} [internalVersionNumber] - The internal version number of the dataset. If another user updates the dataset version metadata before you send the update request, data inconsistencies may occur. To prevent this, you can use the optional internalVersionNumber parameter. This parameter must include the internal version number corresponding to the dataset version being updated. Note that internal version numbers increase sequentially with each version update.
2122
* @returns {Promise<void>} - This method does not return anything upon successful completion.
2223
* @throws {ResourceValidationError} - If there are validation errors related to the provided information.
2324
* @throws {ReadError} - If there are errors while reading data.
2425
* @throws {WriteError} - If there are errors while writing data.
2526
*/
26-
async execute(datasetId: number | string, updatedDataset: DatasetDTO): Promise<void> {
27+
async execute(
28+
datasetId: number | string,
29+
updatedDataset: DatasetDTO,
30+
internalVersionNumber?: number
31+
): Promise<void> {
2732
const metadataBlocks = await this.getNewDatasetMetadataBlocks(updatedDataset)
2833
this.getNewDatasetValidator().validate(updatedDataset, metadataBlocks)
29-
return this.getDatasetsRepository().updateDataset(datasetId, updatedDataset, metadataBlocks)
34+
return this.getDatasetsRepository().updateDataset(
35+
datasetId,
36+
updatedDataset,
37+
metadataBlocks,
38+
internalVersionNumber
39+
)
3040
}
3141
}

src/datasets/infra/repositories/DatasetsRepository.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,12 +205,18 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
205205
public async updateDataset(
206206
datasetId: string | number,
207207
dataset: DatasetDTO,
208-
datasetMetadataBlocks: MetadataBlock[]
208+
datasetMetadataBlocks: MetadataBlock[],
209+
internalVersionNumber?: number
209210
): Promise<void> {
210211
return this.doPut(
211212
this.buildApiEndpoint(this.datasetsResourceName, `editMetadata`, datasetId),
212213
transformDatasetModelToUpdateDatasetRequestPayload(dataset, datasetMetadataBlocks),
213-
{ replace: true }
214+
{
215+
replace: true,
216+
...(typeof internalVersionNumber === 'number' && {
217+
sourceInternalVersionNumber: internalVersionNumber
218+
})
219+
}
214220
)
215221
.then(() => undefined)
216222
.catch((error) => {

0 commit comments

Comments
 (0)