public async Task <IActionResult> Update([FromForm] UpdateProductViewModel viewModel) { try { using var reader = ExcelReaderFactory.CreateReader(viewModel.File.OpenReadStream()); var configuration = new ExcelDataSetConfiguration() { ConfigureDataTable = (it) => new ExcelDataTableConfiguration() { UseHeaderRow = true } }; using var workbook = reader.AsDataSet(configuration); var tasks = new List <Task <Result> >(); foreach (DataTable sheet in workbook.Tables) { foreach (DataRow row in sheet.Rows) { var productCode = row.GetValue <string>("codigo"); var gridCode = row.GetValue <string>("codigo sku"); var price = row.GetValue <decimal?>("preço"); var quantity = row.GetValue <int?>("estoque"); var updatePriceAndQuantityViewModel = new UpdateProductPriceAndQuantityViewModel { Price = price, Quantity = quantity }; tasks.Add(_productApplication.Update(productCode, gridCode, updatePriceAndQuantityViewModel)); } } var result = await Task.WhenAll(tasks); _uow.Commit(); return(Ok(result)); } catch (Exception) { _uow.Rollback(); return(StatusCode(StatusCodes.Status500InternalServerError)); } }
public async Task <Result> Update(string productCode, string gridCode, UpdateProductPriceAndQuantityViewModel viewModel) { if (string.IsNullOrEmpty(productCode)) { return(Result.Fail("Product code must be informed")); } var maybeProduct = await _productRepository.FindOne(productCode); if (maybeProduct.HasNoValue) { return(Result.Fail($"Product with {productCode} does not exist")); } var product = maybeProduct.Value; if (!product.HasGrid) { UpdatePrice(product, viewModel.Price); UpdateQuantity(product, viewModel.Quantity); return(await _productRepository.Save(productCode, product)); } if (string.IsNullOrEmpty(gridCode)) { return(Result.Fail("Grid code must be informed")); } var maybeGrid = await _productRepository.FindOne(productCode, gridCode); if (maybeGrid.HasNoValue) { return(Result.Fail($"Grid with {gridCode} does not exist")); } var grid = maybeGrid.Value; UpdatePrice(grid, viewModel.Price); UpdateQuantity(grid, viewModel.Quantity); return(await _productRepository.Save(productCode, gridCode, grid)); }