private void AddOrRemoveOrderedItems(Order order, SavedOrderDto orderDto) { try { var addedOrderItems = orderDto.OrderedItems.Where(oid => order.OrderedItems.All(oi => oi.ProductId != oid.ProductId)) .ToList(); foreach (var orderItemDto in addedOrderItems) { order.AddItem(orderItemDto.ProductId, orderItemDto.Quantity); } var removedOrderedItems = order.OrderedItems.Where(oi => orderDto.OrderedItems.Any(oir => oir.ProductId != oi.ProductId)) .ToList(); foreach (var item in removedOrderedItems) { order.RemoveItem(item); } } catch (Exception e) { throw new Exception(e.Message); } }
public async Task <IServiceResult> CreateAsync(SavedOrderDto orderDto) { try { var order = _mapper.Map <SavedOrderDto, Order>(orderDto); await _repository.AddAsync(order); foreach (var orderItem in orderDto.OrderedItems) { order.AddItem(orderItem.ProductId, orderItem.Quantity); _logger.LogError($"Added product with id {orderItem.ProductId} to order with id {order.Id}."); } if (!await _unitOfWork.CompleteAsync()) { throw new SaveFailedException(nameof(order)); } _logger.LogInformation($"Added new {nameof(order)} with id: {order.Id}."); var result = await GetSingleAsync(order.Id.ToString()); return(new ServiceResult(payload: result.Payload)); } catch (Exception e) { _logger.LogError($"Adding new order failed. {e.Message}"); return(new ServiceResult(false, e.Message)); } }
public async Task <IServiceResult> UpdateAsync(string id, SavedOrderDto orderDto) { try { var orderId = id.ToGuid(); var order = await _repository.GetSingleAsync(orderId); _mapper.Map(orderDto, order); AddOrRemoveOrderedItems(order, orderDto); if (!await _unitOfWork.CompleteAsync()) { throw new SaveFailedException(nameof(order)); } _logger.LogInformation($"Updated {nameof(order)} with id: {order.Id}"); var result = await GetSingleAsync(order.Id.ToString()); return(new ServiceResult(payload: result.Payload)); } catch (Exception e) { _logger.LogError($"Updating order with id: {id} failed. {e.Message}"); return(new ServiceResult(false, e.Message)); } }