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);
        }
Esempio n. 2
0
        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));
        }