-
Notifications
You must be signed in to change notification settings - Fork 10
Adds create dataset use case #114
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
38 commits
Select commit
Hold shift + click to select a range
fcd6e73
Stash: CreateDataset use case WIP. Pending validation and data access…
GPortas 3a24289
Changed: NewDataset model properties
GPortas 644f228
Stash: NewDatasetValidator logic WIP
GPortas 2c35633
Added: test cases for NewDatasetValidator empty field error handling
GPortas 1b4b29a
Stash: multiple field value validation WIP
GPortas 32ce475
Refactor: NewDatasetValidator unit test
GPortas 3306896
Added: test case to NewDatasetValidator and refactor
GPortas fa3a6c3
Added: NewDatasetValidator test case for field type error
GPortas 7765114
Added: not multiple field validation logic to NewDatasetValidator
GPortas 3deaac7
Added: child field validation logic and refactor to NewDatasetValidator
GPortas 822f384
Added: empty required array field error handling and refactor to NewD…
GPortas 19c6400
Refactor: validation methods extracted in NewDatasetValidator
GPortas 6d5028d
Refactor: validateMetadataBlock extracted in NewDatasetValidator
GPortas 705cd2c
Added: date format validation to NewDatasetValidator and associated u…
GPortas 335fcec
Added: test cases for controlled vocabulary and date fields
GPortas b577bc8
Refactor: dataset validator resource validation errors localtion
GPortas 9fda8b5
Added: createDataset use case export
GPortas b36c23c
Refactor: using NewDatasetMetadataFieldAndValueInfo to group multiple…
GPortas c9bdf84
Added: typeClass property to MetadataFieldInfo
GPortas 76775e4
Added: newDatasetTransformers WIP and calculating metadatablocks befo…
GPortas 1a1d08a
Fixed: test name
GPortas 46222d9
Fixed: newDatasetTransformers
GPortas 5296864
Stash: newDatasetTransformers fixes and tests WIP
GPortas 5ad4e25
Added: newDatasetTransformers tweaks and fixes and passing unit test
GPortas 8f09830
Stash: createDataset repository logic WIP
GPortas e4670cf
Added: completed createDataset repository logic with passing tests
GPortas 0a4464e
Stash: createDataset IT WIP (failing)
GPortas 97c47fd
Changed: returning ids when the dataset is created
GPortas d9aa27a
Added: missing models exported in index.ts
GPortas db836d8
Fixed: missing import in IDatasetsRepository
GPortas b86911f
Refactor: DTO convention for new dataset creation
GPortas 53bc05f
Fixed: CreateDataset dependency calls
GPortas bf8fc08
Refactor: metadata field validators
GPortas 2860270
Changed: protected methods now private
GPortas ce8e391
Changed: docker env vars to use docker.io and unstable
GPortas 938ab8f
Refactor: replaced inheritance with composition in metadata field va…
GPortas 3c5f190
Changed: NewDatasetValidator renamed to NewDatasetResourceValidator
GPortas 32f4682
Merge branch 'develop' of github.com:IQSS/dataverse-client-javascript…
GPortas File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| import { ResourceValidationError } from './errors/ResourceValidationError'; | ||
|
|
||
| export interface NewResourceValidator { | ||
| // eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
| validate(...args: any[]): Promise<void | ResourceValidationError>; | ||
| } | ||
5 changes: 5 additions & 0 deletions
5
src/core/domain/useCases/validators/errors/ResourceValidationError.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| export class ResourceValidationError extends Error { | ||
| constructor(message: string) { | ||
| super(message); | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| import { DatasetLicense } from '../models/Dataset'; | ||
|
|
||
| export interface NewDatasetDTO { | ||
| license?: DatasetLicense; | ||
| metadataBlockValues: NewDatasetMetadataBlockValuesDTO[]; | ||
| } | ||
|
|
||
| export interface NewDatasetMetadataBlockValuesDTO { | ||
| name: string; | ||
| fields: NewDatasetMetadataFieldsDTO; | ||
| } | ||
|
|
||
| export type NewDatasetMetadataFieldsDTO = Record<string, NewDatasetMetadataFieldValueDTO>; | ||
|
|
||
| export type NewDatasetMetadataFieldValueDTO = | ||
| | string | ||
| | string[] | ||
| | NewDatasetMetadataChildFieldValueDTO | ||
| | NewDatasetMetadataChildFieldValueDTO[]; | ||
|
|
||
| export type NewDatasetMetadataChildFieldValueDTO = Record<string, string>; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| export interface CreatedDatasetIdentifiers { | ||
| persistentId: string; | ||
| numericId: number; | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| import { UseCase } from '../../../core/domain/useCases/UseCase'; | ||
| import { IDatasetsRepository } from '../repositories/IDatasetsRepository'; | ||
| import { NewDatasetDTO, NewDatasetMetadataBlockValuesDTO } from '../dtos/NewDatasetDTO'; | ||
| import { NewResourceValidator } from '../../../core/domain/useCases/validators/NewResourceValidator'; | ||
| import { IMetadataBlocksRepository } from '../../../metadataBlocks/domain/repositories/IMetadataBlocksRepository'; | ||
| import { MetadataBlock } from '../../../metadataBlocks'; | ||
| import { CreatedDatasetIdentifiers } from '../models/CreatedDatasetIdentifiers'; | ||
|
|
||
| export class CreateDataset implements UseCase<CreatedDatasetIdentifiers> { | ||
| private datasetsRepository: IDatasetsRepository; | ||
| private metadataBlocksRepository: IMetadataBlocksRepository; | ||
| private newDatasetValidator: NewResourceValidator; | ||
|
|
||
| constructor( | ||
| datasetsRepository: IDatasetsRepository, | ||
| metadataBlocksRepository: IMetadataBlocksRepository, | ||
| newDatasetValidator: NewResourceValidator, | ||
| ) { | ||
| this.datasetsRepository = datasetsRepository; | ||
| this.metadataBlocksRepository = metadataBlocksRepository; | ||
| this.newDatasetValidator = newDatasetValidator; | ||
| } | ||
|
|
||
| async execute(newDataset: NewDatasetDTO, collectionId: string = 'root'): Promise<CreatedDatasetIdentifiers> { | ||
| const metadataBlocks = await this.getNewDatasetMetadataBlocks(newDataset); | ||
| this.newDatasetValidator.validate(newDataset, metadataBlocks); | ||
| return this.datasetsRepository.createDataset(newDataset, metadataBlocks, collectionId); | ||
| } | ||
|
|
||
| async getNewDatasetMetadataBlocks(newDataset: NewDatasetDTO): Promise<MetadataBlock[]> { | ||
| let metadataBlocks: MetadataBlock[] = []; | ||
| await Promise.all( | ||
| newDataset.metadataBlockValues.map(async (metadataBlockValue: NewDatasetMetadataBlockValuesDTO) => { | ||
| metadataBlocks.push(await this.metadataBlocksRepository.getMetadataBlockByName(metadataBlockValue.name)); | ||
| }), | ||
| ); | ||
| return metadataBlocks; | ||
| } | ||
| } |
29 changes: 29 additions & 0 deletions
29
src/datasets/domain/useCases/validators/BaseMetadataFieldValidator.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| import { NewDatasetMetadataFieldValueDTO } from '../../dtos/NewDatasetDTO'; | ||
| import { FieldValidationError } from './errors/FieldValidationError'; | ||
| import { MetadataFieldInfo } from '../../../../metadataBlocks'; | ||
|
|
||
| export interface NewDatasetMetadataFieldAndValueInfo { | ||
| metadataFieldInfo: MetadataFieldInfo; | ||
| metadataFieldKey: string; | ||
| metadataFieldValue: NewDatasetMetadataFieldValueDTO; | ||
| metadataBlockName: string; | ||
| metadataParentFieldKey?: string; | ||
| metadataFieldPosition?: number; | ||
| } | ||
|
|
||
| export abstract class BaseMetadataFieldValidator { | ||
MellyGray marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| abstract validate(newDatasetMetadataFieldAndValueInfo: NewDatasetMetadataFieldAndValueInfo): void; | ||
|
|
||
| protected createGeneralValidationError( | ||
| newDatasetMetadataFieldAndValueInfo: NewDatasetMetadataFieldAndValueInfo, | ||
| reason: string, | ||
| ): FieldValidationError { | ||
| return new FieldValidationError( | ||
| newDatasetMetadataFieldAndValueInfo.metadataFieldKey, | ||
| newDatasetMetadataFieldAndValueInfo.metadataBlockName, | ||
| newDatasetMetadataFieldAndValueInfo.metadataParentFieldKey, | ||
| newDatasetMetadataFieldAndValueInfo.metadataFieldPosition, | ||
| reason, | ||
| ); | ||
| } | ||
| } | ||
51 changes: 51 additions & 0 deletions
51
src/datasets/domain/useCases/validators/MetadataFieldValidator.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,51 @@ | ||
| import { BaseMetadataFieldValidator, NewDatasetMetadataFieldAndValueInfo } from './BaseMetadataFieldValidator'; | ||
| import { MultipleMetadataFieldValidator } from './MultipleMetadataFieldValidator'; | ||
| import { SingleMetadataFieldValidator } from './SingleMetadataFieldValidator'; | ||
| import { EmptyFieldError } from './errors/EmptyFieldError'; | ||
| import { NewDatasetMetadataFieldValueDTO } from '../../dtos/NewDatasetDTO'; | ||
|
|
||
| export class MetadataFieldValidator extends BaseMetadataFieldValidator { | ||
| constructor( | ||
| private singleMetadataFieldValidator: SingleMetadataFieldValidator, | ||
| private multipleMetadataFieldValidator: MultipleMetadataFieldValidator, | ||
| ) { | ||
| super(); | ||
| } | ||
|
|
||
| validate(newDatasetMetadataFieldAndValueInfo: NewDatasetMetadataFieldAndValueInfo): void { | ||
| const metadataFieldValue = newDatasetMetadataFieldAndValueInfo.metadataFieldValue; | ||
| const metadataFieldInfo = newDatasetMetadataFieldAndValueInfo.metadataFieldInfo; | ||
| if ( | ||
| metadataFieldValue == undefined || | ||
| metadataFieldValue == null || | ||
| this.isEmptyString(metadataFieldValue) || | ||
| this.isEmptyArray(metadataFieldValue) | ||
| ) { | ||
| if (metadataFieldInfo.isRequired) { | ||
| throw new EmptyFieldError( | ||
| newDatasetMetadataFieldAndValueInfo.metadataFieldKey, | ||
| newDatasetMetadataFieldAndValueInfo.metadataBlockName, | ||
| newDatasetMetadataFieldAndValueInfo.metadataParentFieldKey, | ||
| newDatasetMetadataFieldAndValueInfo.metadataFieldPosition, | ||
| ); | ||
| } else { | ||
| return; | ||
| } | ||
| } | ||
| if (newDatasetMetadataFieldAndValueInfo.metadataFieldInfo.multiple) { | ||
| this.multipleMetadataFieldValidator.validate(newDatasetMetadataFieldAndValueInfo); | ||
| } else { | ||
| this.singleMetadataFieldValidator.validate(newDatasetMetadataFieldAndValueInfo); | ||
| } | ||
| } | ||
|
|
||
| private isEmptyString(metadataFieldValue: NewDatasetMetadataFieldValueDTO): boolean { | ||
| return typeof metadataFieldValue == 'string' && metadataFieldValue.trim() === ''; | ||
| } | ||
|
|
||
| private isEmptyArray(metadataFieldValue: NewDatasetMetadataFieldValueDTO): boolean { | ||
| return ( | ||
| Array.isArray(metadataFieldValue) && (metadataFieldValue as Array<NewDatasetMetadataFieldValueDTO>).length == 0 | ||
| ); | ||
| } | ||
| } |
55 changes: 55 additions & 0 deletions
55
src/datasets/domain/useCases/validators/MultipleMetadataFieldValidator.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| import { BaseMetadataFieldValidator, NewDatasetMetadataFieldAndValueInfo } from './BaseMetadataFieldValidator'; | ||
| import { NewDatasetMetadataFieldValueDTO } from '../../dtos/NewDatasetDTO'; | ||
| import { SingleMetadataFieldValidator } from './SingleMetadataFieldValidator'; | ||
|
|
||
| export class MultipleMetadataFieldValidator extends BaseMetadataFieldValidator { | ||
| constructor(private singleMetadataFieldValidator: SingleMetadataFieldValidator) { | ||
| super(); | ||
| } | ||
|
|
||
| validate(newDatasetMetadataFieldAndValueInfo: NewDatasetMetadataFieldAndValueInfo): void { | ||
| const metadataFieldValue = newDatasetMetadataFieldAndValueInfo.metadataFieldValue; | ||
| const metadataFieldInfo = newDatasetMetadataFieldAndValueInfo.metadataFieldInfo; | ||
| if (!Array.isArray(metadataFieldValue)) { | ||
| throw this.createGeneralValidationError(newDatasetMetadataFieldAndValueInfo, 'Expecting an array of values.'); | ||
| } | ||
| if (this.isValidArrayType(metadataFieldValue, 'string') && metadataFieldInfo.type === 'NONE') { | ||
| throw this.createGeneralValidationError( | ||
| newDatasetMetadataFieldAndValueInfo, | ||
| 'Expecting an array of child fields, not strings.', | ||
| ); | ||
| } else if (this.isValidArrayType(metadataFieldValue, 'object') && metadataFieldInfo.type !== 'NONE') { | ||
| throw this.createGeneralValidationError( | ||
| newDatasetMetadataFieldAndValueInfo, | ||
| 'Expecting an array of strings, not child fields.', | ||
| ); | ||
| } else if ( | ||
| !this.isValidArrayType(metadataFieldValue, 'object') && | ||
| !this.isValidArrayType(metadataFieldValue, 'string') | ||
| ) { | ||
| throw this.createGeneralValidationError( | ||
| newDatasetMetadataFieldAndValueInfo, | ||
| 'The provided array of values is not valid.', | ||
| ); | ||
| } | ||
|
|
||
| const fieldValues = metadataFieldValue as NewDatasetMetadataFieldValueDTO[]; | ||
| fieldValues.forEach((value, metadataFieldPosition) => { | ||
| this.singleMetadataFieldValidator.validate({ | ||
| metadataFieldInfo: metadataFieldInfo, | ||
| metadataFieldKey: newDatasetMetadataFieldAndValueInfo.metadataFieldKey, | ||
| metadataFieldValue: value, | ||
| metadataBlockName: newDatasetMetadataFieldAndValueInfo.metadataBlockName, | ||
| metadataParentFieldKey: newDatasetMetadataFieldAndValueInfo.metadataFieldKey, | ||
| metadataFieldPosition: metadataFieldPosition, | ||
| }); | ||
| }); | ||
| } | ||
|
|
||
| private isValidArrayType( | ||
| metadataFieldValue: Array<string | NewDatasetMetadataFieldValueDTO>, | ||
| expectedType: 'string' | 'object', | ||
| ): boolean { | ||
| return metadataFieldValue.every((item: string | NewDatasetMetadataFieldValueDTO) => typeof item === expectedType); | ||
| } | ||
| } |
33 changes: 33 additions & 0 deletions
33
src/datasets/domain/useCases/validators/NewDatasetResourceValidator.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| import { NewDatasetDTO, NewDatasetMetadataBlockValuesDTO } from '../../dtos/NewDatasetDTO'; | ||
| import { NewResourceValidator } from '../../../../core/domain/useCases/validators/NewResourceValidator'; | ||
| import { MetadataBlock } from '../../../../metadataBlocks'; | ||
| import { ResourceValidationError } from '../../../../core/domain/useCases/validators/errors/ResourceValidationError'; | ||
| import { BaseMetadataFieldValidator } from './BaseMetadataFieldValidator'; | ||
|
|
||
| export class NewDatasetResourceValidator implements NewResourceValidator { | ||
| constructor(private metadataFieldValidator: BaseMetadataFieldValidator) {} | ||
|
|
||
| async validate(resource: NewDatasetDTO, metadataBlocks: MetadataBlock[]): Promise<void | ResourceValidationError> { | ||
| for (const metadataBlockValues of resource.metadataBlockValues) { | ||
| await this.validateMetadataBlock(metadataBlockValues, metadataBlocks); | ||
| } | ||
| } | ||
|
|
||
| private async validateMetadataBlock( | ||
| metadataBlockValues: NewDatasetMetadataBlockValuesDTO, | ||
| metadataBlocks: MetadataBlock[], | ||
| ) { | ||
| const metadataBlockName = metadataBlockValues.name; | ||
| const metadataBlock: MetadataBlock = metadataBlocks.find( | ||
| (metadataBlock) => metadataBlock.name === metadataBlockName, | ||
| ); | ||
| for (const metadataFieldKey of Object.keys(metadataBlock.metadataFields)) { | ||
| this.metadataFieldValidator.validate({ | ||
| metadataFieldInfo: metadataBlock.metadataFields[metadataFieldKey], | ||
| metadataFieldKey: metadataFieldKey, | ||
| metadataFieldValue: metadataBlockValues.fields[metadataFieldKey], | ||
| metadataBlockName: metadataBlockName, | ||
| }); | ||
| } | ||
| } | ||
| } |
95 changes: 95 additions & 0 deletions
95
src/datasets/domain/useCases/validators/SingleMetadataFieldValidator.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,95 @@ | ||
| import { BaseMetadataFieldValidator, NewDatasetMetadataFieldAndValueInfo } from './BaseMetadataFieldValidator'; | ||
| import { ControlledVocabularyFieldError } from './errors/ControlledVocabularyFieldError'; | ||
| import { DateFormatFieldError } from './errors/DateFormatFieldError'; | ||
| import { MetadataFieldValidator } from './MetadataFieldValidator'; | ||
| import { NewDatasetMetadataChildFieldValueDTO } from '../../dtos/NewDatasetDTO'; | ||
| import { MultipleMetadataFieldValidator } from './MultipleMetadataFieldValidator'; | ||
|
|
||
| export class SingleMetadataFieldValidator extends BaseMetadataFieldValidator { | ||
| validate(newDatasetMetadataFieldAndValueInfo: NewDatasetMetadataFieldAndValueInfo): void { | ||
| const metadataFieldValue = newDatasetMetadataFieldAndValueInfo.metadataFieldValue; | ||
| const metadataFieldInfo = newDatasetMetadataFieldAndValueInfo.metadataFieldInfo; | ||
| if (Array.isArray(metadataFieldValue)) { | ||
| throw this.createGeneralValidationError( | ||
| newDatasetMetadataFieldAndValueInfo, | ||
| 'Expecting a single field, not an array.', | ||
| ); | ||
| } | ||
| if (typeof metadataFieldValue === 'object' && metadataFieldInfo.type !== 'NONE') { | ||
| throw this.createGeneralValidationError( | ||
| newDatasetMetadataFieldAndValueInfo, | ||
| 'Expecting a string, not child fields.', | ||
| ); | ||
| } | ||
| if (typeof metadataFieldValue === 'string' && metadataFieldInfo.type === 'NONE') { | ||
| throw this.createGeneralValidationError( | ||
| newDatasetMetadataFieldAndValueInfo, | ||
| 'Expecting child fields, not a string.', | ||
| ); | ||
| } | ||
| this.validateFieldValue(newDatasetMetadataFieldAndValueInfo); | ||
| } | ||
|
|
||
| private validateFieldValue(newDatasetMetadataFieldAndValueInfo: NewDatasetMetadataFieldAndValueInfo) { | ||
| const metadataFieldInfo = newDatasetMetadataFieldAndValueInfo.metadataFieldInfo; | ||
| if (metadataFieldInfo.isControlledVocabulary) { | ||
| this.validateControlledVocabularyFieldValue(newDatasetMetadataFieldAndValueInfo); | ||
| } | ||
|
|
||
| if (metadataFieldInfo.type == 'DATE') { | ||
| this.validateDateFieldValue(newDatasetMetadataFieldAndValueInfo); | ||
| } | ||
|
|
||
| if (metadataFieldInfo.childMetadataFields != undefined) { | ||
| this.validateChildMetadataFieldValues(newDatasetMetadataFieldAndValueInfo); | ||
| } | ||
| } | ||
|
|
||
| private validateControlledVocabularyFieldValue( | ||
| newDatasetMetadataFieldAndValueInfo: NewDatasetMetadataFieldAndValueInfo, | ||
| ) { | ||
| if ( | ||
| !newDatasetMetadataFieldAndValueInfo.metadataFieldInfo.controlledVocabularyValues.includes( | ||
| newDatasetMetadataFieldAndValueInfo.metadataFieldValue as string, | ||
| ) | ||
| ) { | ||
| throw new ControlledVocabularyFieldError( | ||
| newDatasetMetadataFieldAndValueInfo.metadataFieldKey, | ||
| newDatasetMetadataFieldAndValueInfo.metadataBlockName, | ||
| newDatasetMetadataFieldAndValueInfo.metadataParentFieldKey, | ||
| newDatasetMetadataFieldAndValueInfo.metadataFieldPosition, | ||
| ); | ||
| } | ||
| } | ||
|
|
||
| private validateDateFieldValue(newDatasetMetadataFieldAndValueInfo: NewDatasetMetadataFieldAndValueInfo) { | ||
| const dateFormatRegex = /^\d{4}-\d{2}-\d{2}$/; | ||
| if (!dateFormatRegex.test(newDatasetMetadataFieldAndValueInfo.metadataFieldValue as string)) { | ||
| throw new DateFormatFieldError( | ||
| newDatasetMetadataFieldAndValueInfo.metadataFieldKey, | ||
| newDatasetMetadataFieldAndValueInfo.metadataBlockName, | ||
| newDatasetMetadataFieldAndValueInfo.metadataParentFieldKey, | ||
| newDatasetMetadataFieldAndValueInfo.metadataFieldPosition, | ||
| ); | ||
| } | ||
| } | ||
|
|
||
| private validateChildMetadataFieldValues(newDatasetMetadataFieldAndValueInfo: NewDatasetMetadataFieldAndValueInfo) { | ||
| const metadataFieldInfo = newDatasetMetadataFieldAndValueInfo.metadataFieldInfo; | ||
| const childMetadataFieldKeys = Object.keys(metadataFieldInfo.childMetadataFields); | ||
| const metadataFieldValidator = new MetadataFieldValidator(this, new MultipleMetadataFieldValidator(this)); | ||
| for (const childMetadataFieldKey of childMetadataFieldKeys) { | ||
| const childMetadataFieldInfo = metadataFieldInfo.childMetadataFields[childMetadataFieldKey]; | ||
| metadataFieldValidator.validate({ | ||
| metadataFieldInfo: childMetadataFieldInfo, | ||
| metadataFieldKey: childMetadataFieldKey, | ||
| metadataFieldValue: ( | ||
| newDatasetMetadataFieldAndValueInfo.metadataFieldValue as NewDatasetMetadataChildFieldValueDTO | ||
| )[childMetadataFieldKey], | ||
| metadataBlockName: newDatasetMetadataFieldAndValueInfo.metadataBlockName, | ||
| metadataParentFieldKey: newDatasetMetadataFieldAndValueInfo.metadataFieldKey, | ||
| metadataFieldPosition: newDatasetMetadataFieldAndValueInfo.metadataFieldPosition, | ||
| }); | ||
| } | ||
| } | ||
| } |
18 changes: 18 additions & 0 deletions
18
src/datasets/domain/useCases/validators/errors/ControlledVocabularyFieldError.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| import { FieldValidationError } from './FieldValidationError'; | ||
|
|
||
| export class ControlledVocabularyFieldError extends FieldValidationError { | ||
| constructor( | ||
| metadataFieldName: string, | ||
| citationBlockName: string, | ||
| parentMetadataFieldName?: string, | ||
| fieldPosition?: number, | ||
| ) { | ||
| super( | ||
| metadataFieldName, | ||
| citationBlockName, | ||
| parentMetadataFieldName, | ||
| fieldPosition, | ||
| 'The field does not have a valid controlled vocabulary value.', | ||
| ); | ||
| } | ||
| } |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.