public async Task <ValidationResult> ValidateAddBasketProductAsync(AddBasketProductInput input)
        {
            ValidationResult validationResult = new();

            if (string.IsNullOrWhiteSpace(input.CustomerEmail))
            {
                validationResult.Messages.Add(new(nameof(AddBasketProductInput.CustomerEmail), $"Debe ingresar un cliente."));
            }
            else
            {
                Customer customer = await _customerRepository.GetCustomer(input.CustomerEmail);

                if (customer is null)
                {
                    validationResult.Messages.Add(new(nameof(AddBasketProductInput.CustomerEmail), $"El usuario '{input.CustomerEmail}' no existe."));
                }
            }

            if (input.Product is null)
            {
                validationResult.Messages.Add(new(nameof(AddBasketProductInput.Product), $"Debe seleccionar un producto."));
            }
            else
            {
                Product product = await _productRepository.GetAsync(input.Product.ProductId);

                if (product is not null)
                {
                    if (!product.IsActive)
                    {
                        validationResult.Messages.Add(new(nameof(AddBasketProductInput.Product), $"El producto '{product.Name}' no esta activo."));
                    }

                    if (input.Product.Quantity <= 0)
                    {
                        validationResult.Messages.Add(new(nameof(AddBasketProductInput.Product.Quantity), $"La cantidad debe ser mayor a cero."));
                    }

                    IEnumerable <ProductVariant> variants = await _productVariantRepository.GetByProduct(product);

                    foreach (ProductVariantPair variantInput in input.Product.Variants)
                    {
                        if (!variants.Any(x => x.Name == variantInput.Name && x.Values.Contains(variantInput.Value)))
                        {
                            validationResult.Messages.Add(new(nameof(AddBasketProductInput.Product.Variants), $"La variante '{variantInput.Name}' con valor '{variantInput.Value}' del producto '{product.Name}' no existe."));
                        }
                    }
                }
                else
                {
                    validationResult.Messages.Add(new(nameof(AddBasketProductInput.Product.ProductId), "El producto no existe."));
                }
            }

            return(validationResult);
        }
Esempio n. 2
0
        public async Task <OperationResult <BasketDto> > AddBasketProductAsync(AddBasketProductInput input)
        {
            var validatioResult = await _validator.ValidateAddBasketProductAsync(input);

            if (validatioResult.IsSuccess)
            {
                var basket = await _repository.GetByCustomerAsync(input.CustomerEmail);

                if (basket is null)
                {
                    basket = await CreateEmplyBasket(input.CustomerEmail);
                }

                basket.Products = basket.Products.Add(input.Product);

                await _repository.UpdateAsync(basket);

                return(OperationResult <BasketDto> .Success(basket.ConvertToDto()));
            }

            return(OperationResult <BasketDto> .Fail(validatioResult));
        }
Esempio n. 3
0
        public async Task <IActionResult> AddBasketProduct(AddBasketProductInput input)
        {
            var result = await _service.AddBasketProductAsync(input);

            return(new OperationActionResult(result));
        }