コード例 #1
0
        public void ConvertToEntity_InputNotNull_ReturnEmplyId()
        {
            CreateProductVariantInput input = MockCreateProductVariantInput();

            ProductVariant variant = input.ConvertToEntity();

            Assert.Equal(Guid.Empty, variant.Id);
        }
コード例 #2
0
        public void ConvertToEntity_InputNotNull_ReturnSameValues()
        {
            CreateProductVariantInput input = MockCreateProductVariantInput();

            ProductVariant variant = input.ConvertToEntity();

            Assert.Equal(input.Values, variant.Values);
        }
コード例 #3
0
        public async Task <ValidationResult> ValidateCreateProductVariant(CreateProductVariantInput input)
        {
            ValidationResult validationResult = new();

            if (string.IsNullOrWhiteSpace(input.Name))
            {
                validationResult.Messages.Add(new(nameof(CreateProductVariantInput.Name), "Debe ingresar un nombre para la variante."));
            }
            else if (input.Name.HasFileInvalidChars())
            {
                validationResult.Messages.Add(new(nameof(CreateProductVariantInput.Name), "El nombre no puede contener caracteres invalidos (<, >, :, \", /, \\, |, ?, *)."));
            }
            else if (!input.Values.Any())
            {
                validationResult.Messages.Add(new(nameof(CreateProductVariantInput.Values), "No se puede crear una variante sin valores."));
            }
            else if (input.Values.GroupBy(x => x).Any(g => g.Count() > 1))
            {
                validationResult.Messages.Add(new(nameof(CreateProductVariantInput.Values), "No pueden haber valores de una variante repetidos."));
            }
            else if (SubCategoriesHasInvalidChars())
            {
                validationResult.Messages.Add(new(nameof(CreateProductVariantInput.Values), "El nombre de los valores no puede contener caracteres invalidos (<, >, :, \", /, \\, |, ?, *)."));
            }
            else
            {
                var product = await _productRepository.GetAsync(input.ProductId);

                if (product is null)
                {
                    validationResult.Messages.Add(new(nameof(CreateProductVariantInput.ProductId), "El producto no existe."));
                }
                else
                {
                    var productVariant = await _productVariantRepository.GetByNameAsync(product, input.Name);

                    if (productVariant is not null)
                    {
                        validationResult.Messages.Add(new(nameof(CreateProductVariantInput.Name), "La variante ya existe."));
                    }
                }
            }

            bool SubCategoriesHasInvalidChars()
            {
                foreach (var item in input.Values)
                {
                    if (item.HasFileInvalidChars())
                    {
                        return(true);
                    }
                }

                return(false);
            }

            return(validationResult);
        }
 public static ProductVariant ConvertToEntity(this CreateProductVariantInput source)
 {
     return(new()
     {
         Name = source.Name,
         Values = source.Values,
         ProductId = source.ProductId
     });
 }
コード例 #5
0
        public async Task <OperationResult <ProductVariantDto> > CreateAsync(CreateProductVariantInput input)
        {
            var validationResult = await _productVariantValidator.ValidateCreateProductVariant(input);

            if (validationResult.IsSuccess)
            {
                var entity = input.ConvertToEntity();

                entity = await _productVariantRepository.CreateAsync(entity);

                return(OperationResult <ProductVariantDto> .Success(entity.ConvertToDto()));
            }

            return(OperationResult <ProductVariantDto> .Fail(validationResult));
        }
コード例 #6
0
        public async Task <IActionResult> Create(CreateProductVariantInput input)
        {
            var result = await _service.CreateAsync(input);

            return(new OperationActionResult(result));
        }