Skip to content

Commit ccbac67

Browse files
committed
Refactor: dataset DTO renaming and restructuring
1 parent 030d65b commit ccbac67

25 files changed

+763
-737
lines changed

src/core/domain/useCases/validators/NewResourceValidator.ts

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export interface ResourceValidator {
2+
validate(...args: unknown[]): void
3+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { DatasetLicense } from '../models/Dataset'
2+
3+
export interface DatasetDTO {
4+
license?: DatasetLicense
5+
metadataBlockValues: DatasetMetadataBlockValuesDTO[]
6+
}
7+
8+
export interface DatasetMetadataBlockValuesDTO {
9+
name: string
10+
fields: DatasetMetadataFieldsDTO
11+
}
12+
13+
export type DatasetMetadataFieldsDTO = Record<string, DatasetMetadataFieldValueDTO>
14+
15+
export type DatasetMetadataFieldValueDTO =
16+
| string
17+
| string[]
18+
| DatasetMetadataChildFieldValueDTO
19+
| DatasetMetadataChildFieldValueDTO[]
20+
21+
export type DatasetMetadataChildFieldValueDTO = Record<string, string>

src/datasets/domain/dtos/NewDatasetDTO.ts

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/datasets/domain/repositories/IDatasetsRepository.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { DatasetLock } from '../models/DatasetLock'
33
import { DatasetPreviewSubset } from '../models/DatasetPreviewSubset'
44
import { DatasetUserPermissions } from '../models/DatasetUserPermissions'
55
import { CreatedDatasetIdentifiers } from '../models/CreatedDatasetIdentifiers'
6-
import { NewDatasetDTO } from '../dtos/NewDatasetDTO'
6+
import { NewDatasetDTO } from '../dtos/DatasetDTO'
77
import { MetadataBlock } from '../../../metadataBlocks'
88

99
export interface IDatasetsRepository {
@@ -33,4 +33,9 @@ export interface IDatasetsRepository {
3333
collectionId: string
3434
): Promise<CreatedDatasetIdentifiers>
3535
publishDataset(datasetId: number | string, versionUpdateType: VersionUpdateType): Promise<void>
36+
updateDataset(
37+
datasetId: number | string,
38+
newDataset: NewDatasetDTO,
39+
datasetMetadataBlocks: MetadataBlock[]
40+
): Promise<void>
3641
}

src/datasets/domain/useCases/CreateDataset.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { IDatasetsRepository } from '../repositories/IDatasetsRepository'
2-
import { NewDatasetDTO } from '../dtos/NewDatasetDTO'
3-
import { NewResourceValidator } from '../../../core/domain/useCases/validators/NewResourceValidator'
2+
import { DatasetDTO } from '../dtos/DatasetDTO'
3+
import { ResourceValidator } from '../../../core/domain/useCases/validators/ResourceValidator'
44
import { IMetadataBlocksRepository } from '../../../metadataBlocks/domain/repositories/IMetadataBlocksRepository'
55
import { CreatedDatasetIdentifiers } from '../models/CreatedDatasetIdentifiers'
66
import { ROOT_COLLECTION_ALIAS } from '../../../collections/domain/models/Collection'
@@ -10,23 +10,23 @@ export class CreateDataset extends DatasetWriteUseCase<CreatedDatasetIdentifiers
1010
constructor(
1111
datasetsRepository: IDatasetsRepository,
1212
metadataBlocksRepository: IMetadataBlocksRepository,
13-
newDatasetValidator: NewResourceValidator
13+
newDatasetValidator: ResourceValidator
1414
) {
1515
super(datasetsRepository, metadataBlocksRepository, newDatasetValidator)
1616
}
1717

1818
/**
1919
* Creates a new Dataset in a collection, given a NewDatasetDTO object and an optional collection identifier, which defaults to root.
2020
*
21-
* @param {NewDatasetDTO} [newDataset] - NewDatasetDTO object including the new dataset metadata field values for each metadata block.
21+
* @param {DatasetDTO} [newDataset] - DatasetDTO object including the new dataset metadata field values for each metadata block.
2222
* @param {string} [collectionId] - Specifies the collection identifier where the new dataset should be created (optional, defaults to root).
2323
* @returns {Promise<CreatedDatasetIdentifiers>}
2424
* @throws {ResourceValidationError} - If there are validation errors related to the provided information.
2525
* @throws {ReadError} - If there are errors while reading data.
2626
* @throws {WriteError} - If there are errors while writing data.
2727
*/
2828
async execute(
29-
newDataset: NewDatasetDTO,
29+
newDataset: DatasetDTO,
3030
collectionId = ROOT_COLLECTION_ALIAS
3131
): Promise<CreatedDatasetIdentifiers> {
3232
const metadataBlocks = await this.getNewDatasetMetadataBlocks(newDataset)

src/datasets/domain/useCases/DatasetWriteUseCase.ts

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
import { UseCase } from '../../../core/domain/useCases/UseCase'
22
import { IDatasetsRepository } from '../repositories/IDatasetsRepository'
3-
import { NewDatasetDTO, NewDatasetMetadataBlockValuesDTO } from '../dtos/NewDatasetDTO'
4-
import { NewResourceValidator } from '../../../core/domain/useCases/validators/NewResourceValidator'
3+
import { DatasetDTO, DatasetMetadataBlockValuesDTO } from '../dtos/DatasetDTO'
4+
import { ResourceValidator } from '../../../core/domain/useCases/validators/ResourceValidator'
55
import { IMetadataBlocksRepository } from '../../../metadataBlocks/domain/repositories/IMetadataBlocksRepository'
66
import { MetadataBlock } from '../../../metadataBlocks'
77

88
export abstract class DatasetWriteUseCase<T> implements UseCase<T> {
99
private datasetsRepository: IDatasetsRepository
1010
private metadataBlocksRepository: IMetadataBlocksRepository
11-
private newDatasetValidator: NewResourceValidator
11+
private newDatasetValidator: ResourceValidator
1212

1313
constructor(
1414
datasetsRepository: IDatasetsRepository,
1515
metadataBlocksRepository: IMetadataBlocksRepository,
16-
newDatasetValidator: NewResourceValidator
16+
newDatasetValidator: ResourceValidator
1717
) {
1818
this.datasetsRepository = datasetsRepository
1919
this.metadataBlocksRepository = metadataBlocksRepository
@@ -30,20 +30,18 @@ export abstract class DatasetWriteUseCase<T> implements UseCase<T> {
3030
return this.metadataBlocksRepository
3131
}
3232

33-
getNewDatasetValidator(): NewResourceValidator {
33+
getNewDatasetValidator(): ResourceValidator {
3434
return this.newDatasetValidator
3535
}
3636

37-
async getNewDatasetMetadataBlocks(newDataset: NewDatasetDTO): Promise<MetadataBlock[]> {
37+
async getNewDatasetMetadataBlocks(dataset: DatasetDTO): Promise<MetadataBlock[]> {
3838
const metadataBlocks: MetadataBlock[] = []
3939
await Promise.all(
40-
newDataset.metadataBlockValues.map(
41-
async (metadataBlockValue: NewDatasetMetadataBlockValuesDTO) => {
42-
metadataBlocks.push(
43-
await this.metadataBlocksRepository.getMetadataBlockByName(metadataBlockValue.name)
44-
)
45-
}
46-
)
40+
dataset.metadataBlockValues.map(async (metadataBlockValue: DatasetMetadataBlockValuesDTO) => {
41+
metadataBlocks.push(
42+
await this.metadataBlocksRepository.getMetadataBlockByName(metadataBlockValue.name)
43+
)
44+
})
4745
)
4846
return metadataBlocks
4947
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { IDatasetsRepository } from '../repositories/IDatasetsRepository'
2+
import { DatasetDTO } from '../dtos/DatasetDTO'
3+
import { ResourceValidator } from '../../../core/domain/useCases/validators/ResourceValidator'
4+
import { IMetadataBlocksRepository } from '../../../metadataBlocks/domain/repositories/IMetadataBlocksRepository'
5+
import { DatasetWriteUseCase } from './DatasetWriteUseCase'
6+
7+
export class UpdateDataset extends DatasetWriteUseCase<void> {
8+
constructor(
9+
datasetsRepository: IDatasetsRepository,
10+
metadataBlocksRepository: IMetadataBlocksRepository,
11+
newDatasetValidator: ResourceValidator
12+
) {
13+
super(datasetsRepository, metadataBlocksRepository, newDatasetValidator)
14+
}
15+
16+
/**
17+
* Updates a Dataset, given a NewDatasetDTO object including the updated dataset metadata field values for each metadata block
18+
*
19+
* @param {number | string} [datasetId] - The dataset identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
20+
* @param {DatasetDTO} [updatedDataset] - DatasetDTO object including the updated dataset metadata field values for each metadata block.
21+
* @returns {Promise<void>} - This method does not return anything upon successful completion.
22+
* @throws {ResourceValidationError} - If there are validation errors related to the provided information.
23+
* @throws {ReadError} - If there are errors while reading data.
24+
* @throws {WriteError} - If there are errors while writing data.
25+
*/
26+
async execute(datasetId: number | string, updatedDataset: DatasetDTO): Promise<void> {
27+
const metadataBlocks = await this.getNewDatasetMetadataBlocks(updatedDataset)
28+
this.getNewDatasetValidator().validate(updatedDataset, metadataBlocks)
29+
this.getDatasetsRepository().updateDataset(datasetId, updatedDataset, metadataBlocks)
30+
}
31+
}

src/datasets/domain/useCases/validators/BaseMetadataFieldValidator.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
1-
import { NewDatasetMetadataFieldValueDTO } from '../../dtos/NewDatasetDTO'
1+
import { DatasetMetadataFieldValueDTO } from '../../dtos/DatasetDTO'
22
import { FieldValidationError } from './errors/FieldValidationError'
33
import { MetadataFieldInfo } from '../../../../metadataBlocks'
44

5-
export interface NewDatasetMetadataFieldAndValueInfo {
5+
export interface DatasetMetadataFieldAndValueInfo {
66
metadataFieldInfo: MetadataFieldInfo
77
metadataFieldKey: string
8-
metadataFieldValue: NewDatasetMetadataFieldValueDTO
8+
metadataFieldValue: DatasetMetadataFieldValueDTO
99
metadataBlockName: string
1010
metadataParentFieldKey?: string
1111
metadataFieldPosition?: number
1212
}
1313

1414
export abstract class BaseMetadataFieldValidator {
15-
abstract validate(newDatasetMetadataFieldAndValueInfo: NewDatasetMetadataFieldAndValueInfo): void
15+
abstract validate(datasetMetadataFieldAndValueInfo: DatasetMetadataFieldAndValueInfo): void
1616

1717
protected createGeneralValidationError(
18-
newDatasetMetadataFieldAndValueInfo: NewDatasetMetadataFieldAndValueInfo,
18+
datasetMetadataFieldAndValueInfo: DatasetMetadataFieldAndValueInfo,
1919
reason: string
2020
): FieldValidationError {
2121
return new FieldValidationError(
22-
newDatasetMetadataFieldAndValueInfo.metadataFieldKey,
23-
newDatasetMetadataFieldAndValueInfo.metadataBlockName,
24-
newDatasetMetadataFieldAndValueInfo.metadataParentFieldKey,
25-
newDatasetMetadataFieldAndValueInfo.metadataFieldPosition,
22+
datasetMetadataFieldAndValueInfo.metadataFieldKey,
23+
datasetMetadataFieldAndValueInfo.metadataBlockName,
24+
datasetMetadataFieldAndValueInfo.metadataParentFieldKey,
25+
datasetMetadataFieldAndValueInfo.metadataFieldPosition,
2626
reason
2727
)
2828
}

src/datasets/domain/useCases/validators/NewDatasetResourceValidator.ts renamed to src/datasets/domain/useCases/validators/DatasetResourceValidator.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
import { NewDatasetDTO, NewDatasetMetadataBlockValuesDTO } from '../../dtos/NewDatasetDTO'
2-
import { NewResourceValidator } from '../../../../core/domain/useCases/validators/NewResourceValidator'
1+
import { DatasetDTO, DatasetMetadataBlockValuesDTO } from '../../dtos/DatasetDTO'
2+
import { ResourceValidator } from '../../../../core/domain/useCases/validators/ResourceValidator'
33
import { MetadataBlock } from '../../../../metadataBlocks'
44
import { BaseMetadataFieldValidator } from './BaseMetadataFieldValidator'
55

6-
export class NewDatasetResourceValidator implements NewResourceValidator {
6+
export class DatasetResourceValidator implements ResourceValidator {
77
constructor(private metadataFieldValidator: BaseMetadataFieldValidator) {}
88

9-
public validate(resource: NewDatasetDTO, metadataBlocks: MetadataBlock[]) {
9+
public validate(resource: DatasetDTO, metadataBlocks: MetadataBlock[]) {
1010
for (const metadataBlockValues of resource.metadataBlockValues) {
1111
this.validateMetadataBlock(metadataBlockValues, metadataBlocks)
1212
}
1313
}
1414

1515
private validateMetadataBlock(
16-
metadataBlockValues: NewDatasetMetadataBlockValuesDTO,
16+
metadataBlockValues: DatasetMetadataBlockValuesDTO,
1717
metadataBlocks: MetadataBlock[]
1818
) {
1919
const metadataBlockName = metadataBlockValues.name

0 commit comments

Comments
 (0)