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); }
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)); }
public async Task <IActionResult> AddBasketProduct(AddBasketProductInput input) { var result = await _service.AddBasketProductAsync(input); return(new OperationActionResult(result)); }