/// <inheritdoc />
        public List <Error> Validate(DynamicMetadata dynamicMetadata, Movie context)
        {
            List <Error> errors = new List <Error>();

            foreach (var validator in _validators)
            {
                errors.AddRange(validator.Validate(dynamicMetadata, context));
            }

            return(errors);
        }
예제 #2
0
        /// <inheritdoc />
        public List <Error> Validate(DynamicMetadata dynamicMetadata, Movie context)
        {
            var property = dynamicMetadata.Properties.First(x => x.Id == Property);

            if (property.Value != null)
            {
                return(new List <Error>());
            }

            return(new List <Error>
            {
                new Error(102312, "Null value")
            });
        }
예제 #3
0
        /// <inheritdoc />
        public List <Error> Validate(DynamicMetadata dynamicMetadata, Movie context)
        {
            var property = dynamicMetadata.Properties.First(x => x.Id == Property);

            int value = (int)property.Value;

            if (value > MaxRange)
            {
                return(new List <Error>
                {
                    new Error((int)ErrorCodes.NumericPropertyValidator.MaxValueExceeded, ErrorCodes.NumericPropertyValidator.MaxValueExceeded.GetDescription())
                });
            }

            return(new List <Error>());
        }
        /// <inheritdoc />
        public List <Error> Validate(DynamicMetadata dynamicMetadata, Movie context)
        {
            var property = dynamicMetadata.Properties.First(x => x.Id == Property);


            if (property.Value != null)
            {
                Model.Person value  = (Model.Person)property.Value;
                var          dbItem = _personReadService.GetById(value.Id);

                if (dbItem == null)
                {
                    return(new List <Error>
                    {
                        new Error(23123123, "Person doesnt exist")
                    });
                }
            }

            return(new List <Error>());
        }
        /// <inheritdoc />
        public List <Error> Validate(DynamicMetadata dynamicMetadata, Movie context)
        {
            var existingItems = context.Metadata.Where(x => x.DefinitionId == dynamicMetadata.DefinitionId).ToList();

            bool isApplied = true;

            foreach (var item in existingItems)
            {
                if (item.Id != dynamicMetadata.Id)
                {
                    isApplied = false;
                }
            }

            if (!isApplied && existingItems.Any())
            {
                return(new List <Error>
                {
                    new Error((int)ErrorCodes.GenericValidator.ReachedMaxItemsOfThisType, ErrorCodes.GenericValidator.ReachedMaxItemsOfThisType.GetDescription())
                });
            }

            return(new List <Error>());
        }
예제 #6
0
        /// <inheritdoc />
        public async Task <DynamicMetadataDto> HandleResult(CreateMovieMetadataCommand command, CancellationToken token)
        {
            var movie = _movieReadService.GetById(command.MovieId);

            if (movie == null)
            {
                throw new NotFoundException();
            }

            var definition = _dynamicMetadataDefinitionReadService.GetById(command.Metadata.MetadataDefinitionId);

            if (definition == null)
            {
                throw new NotFoundException();
            }

            var validator = _validatorFactory.GetValidator(definition);

            var metadata = new DynamicMetadata
            {
                DefinitionId = command.Metadata.MetadataDefinitionId,
                Id           = Guid.NewGuid().ToString()
            };

            foreach (var metadataEntry in command.Metadata.DynamicProperties)
            {
                var propertyDefinition = definition.Properties.SingleOrDefault(x => x.Id == metadataEntry.Id);
                if (propertyDefinition != null)
                {
                    if (propertyDefinition.Type != metadataEntry.Type)
                    {
                        throw new AggregatedValidationException("Type mismatch")
                              {
                                  ErrorCode        = 11231,
                                  ValidationErrors = new List <Error>()
                              };
                    }

                    var existingMetadata = metadata.Properties.SingleOrDefault(x => x.Id == metadataEntry.Id);
                    if (existingMetadata == null)
                    {
                        try
                        {
                            var parsedValue = _inputDataParser.DeserializeItem(metadataEntry.Id, metadataEntry.Type,
                                                                               metadataEntry.Value);
                            metadata.Properties.Add(parsedValue);
                        }
                        catch (JsonException exception)
                        {
                            throw new AggregatedValidationException("Invalid type mismatch")
                                  {
                                      ErrorCode        = 11231,
                                      ValidationErrors = new List <Error>()
                                  };
                        }
                    }
                }
            }

            foreach (var propertyInDefinition in definition.Properties)
            {
                var existingProperty = metadata.Properties.FirstOrDefault(x => x.Id == propertyInDefinition.Id);
                if (existingProperty == null)
                {
                    metadata.Properties.Add(propertyInDefinition);
                }
            }

            var validationResult = validator.Validate(metadata, movie);

            if (validationResult.Any())
            {
                throw new AggregatedValidationException("Validation exception")
                      {
                          ErrorCode        = 1,
                          ValidationErrors = validationResult
                      };
            }

            movie.Metadata.Add(metadata);

            _movieWriteService.UpdateItem(movie, token);

            var resultValue = _mapper.Map <DynamicMetadataDto>(metadata);

            return(resultValue);
        }