public async Task <ServiceResponse <GetWarehouseTransactionItemDto> > AddItemToTransactionAsync(int warehouseTransactionId, AddWarehouseItemDto dto) { var response = new ServiceResponse <GetWarehouseTransactionItemDto>(); try { var dbWarehouseTransaction = await _context.WarehouseTransactions .FirstOrDefaultAsync(x => x.Id == warehouseTransactionId); if (dbWarehouseTransaction == null) { throw new WarehouseTransactionNotFoundException(); } if (!dbWarehouseTransaction.CanModify()) { throw new WarehouseTransactionModifiedException(); } var dbProduct = await _context.Products .Include(x => x.Category) .FirstOrDefaultAsync(x => x.Id == dto.ProductId); if (dbProduct == null) { throw new ProductNotFoundException(); } var existedWarehouseTransactionItem = await _context.WarehouseTransactionItems .Include(x => x.WarehouseTransaction) .Include(x => x.Product) .ThenInclude(x => x.Category) .FirstOrDefaultAsync(x => x.ProductId == dto.ProductId && x.WarehouseTransaction.Id == warehouseTransactionId); if (existedWarehouseTransactionItem != null) { existedWarehouseTransactionItem.Quantity = dto.Quantity; _context.WarehouseTransactionItems.Update(existedWarehouseTransactionItem); await _context.SaveChangeWithValidationAsync(); response.Data = _mapper.Map <GetWarehouseTransactionItemDto>(existedWarehouseTransactionItem); } else { var newWarehouseTransactionItem = new WarehouseTransactionItem() { WarehouseTransaction = dbWarehouseTransaction, ProductId = dbProduct.Id, Product = dbProduct, Quantity = dto.Quantity, }; await _context.WarehouseTransactionItems.AddAsync(newWarehouseTransactionItem); await _context.SaveChangeWithValidationAsync(); response.Data = _mapper.Map <GetWarehouseTransactionItemDto>(newWarehouseTransactionItem); } return(response); } catch (BaseServiceException ex) { response.Success = false; response.Code = ex.Code; response.Message = ex.ErrorMessage; _logger.LogError(ex.Message, ex.StackTrace); return(response); } catch (Exception ex) { response.Success = false; response.Code = ErrorCode.WAREHOUSE_TRANSACTION_ITEM_UNEXPECTED_ERROR; response.Message = ex.Message; _logger.LogError(ex.Message, ex.StackTrace); return(response); } }
public async Task <IActionResult> AddItemToTransaction([FromRoute] int warehouseTransactionId, [FromBody] AddWarehouseItemDto dto) { var res = await _service.AddItemToTransactionAsync(warehouseTransactionId, dto); if (res.Success) { return(Ok(res)); } return(BadRequest(res)); }