public async Task <ValidationResult> ValidateUpdateProductAvailability(UpdateProductAvailabilityInput input) { ValidationResult validationResult = new(); Product product = await _productRepository.GetAsync(input.ProductId); if (product is null) { validationResult.Messages.Add(new(nameof(UpdateProductAvailabilityInput.ProductId), "El producto no existe.")); } else if (input.IsActive) { if (input.Stock <= 0) { validationResult.Messages.Add(new(nameof(UpdateProductAvailabilityInput.Stock), "No se puede activar un producto que no tiene stock.")); } if (string.IsNullOrWhiteSpace(product.Name)) { validationResult.Messages.Add(new(nameof(UpdateProductAvailabilityInput.Stock), "No se puede activar un producto que no tiene nombre.")); } if (string.IsNullOrWhiteSpace(product.Category)) { validationResult.Messages.Add(new(nameof(UpdateProductAvailabilityInput.Stock), "No se puede activar un producto que no tiene categoria.")); } if (string.IsNullOrWhiteSpace(product.SubCategory)) { validationResult.Messages.Add(new(nameof(UpdateProductAvailabilityInput.Stock), "No se puede activar un producto que no tiene subcategoria.")); } if (product.Cost < 0) { validationResult.Messages.Add(new(nameof(UpdateProductAvailabilityInput.Stock), "No se puede activar un producto cuyo costo es menor a cero.")); } if (product.Price <= 0) { validationResult.Messages.Add(new(nameof(UpdateProductInput.Price), "No se puede activar un producto cuyo precio es mayor a cero.")); } if (product.Price < product.Cost) { validationResult.Messages.Add(new(nameof(UpdateProductInput.Price), "No se puede activar un producto cuyo precio es menor que el costo.")); } if (product.Thumbnail is null) { validationResult.Messages.Add(new(nameof(UpdateProductInput.Thumbnail), "No se puede activar un producto sin una imagen principal.")); } } return(validationResult); }
public async Task <OperationResult <ProductDto> > UpdateProductAvailabilityAsync(UpdateProductAvailabilityInput input) { ValidationResult validationResult = await _validator.ValidateUpdateProductAvailability(input); if (validationResult.IsSuccess) { Product product = await _repository.GetAsync(input.ProductId); product.IsActive = input.IsActive; product.Stock = input.Stock; await _repository.UpdateAsync(product); return(OperationResult <ProductDto> .Success(product.ConvertToDto())); } else { return(OperationResult <ProductDto> .Fail(validationResult)); } }
public async Task <IActionResult> UpdateAvailability(UpdateProductAvailabilityInput input) { var result = await _productService.UpdateProductAvailabilityAsync(input); return(new OperationActionResult(result)); }