public async Task <Result <ExpectedOrderItem> > UpdateExpectedOrderItem(ExpectedOrderItemContext context)
        {
            var item = await _dbContext.ExpectedOrderItems.FindAsync(context.OrderItemId);

            if (item == null)
            {
                _logger.LogInformation($"Could not find order item {context.OrderItemId}.");

                return(new Result <ExpectedOrderItem> {
                    Value = null, IsSuccessful = false
                });
            }

            item.Status = (int)context.Status;

            _dbContext.ExpectedOrderItems.Update(item);

            int changes = await _dbContext.SaveChangesAsync();

            if (changes <= 0)
            {
                _logger.LogInformation($"Order item {context.OrderItemId} could not be saved.");

                return(new Result <ExpectedOrderItem> {
                    Reason = ReasonType.DatabaseError, ChangeCount = changes, IsSuccessful = false
                });
            }

            _logger.LogInformation($"Order item {context.OrderItemId} was saved.");

            return(new Result <ExpectedOrderItem> {
                Value = MapToExpectedOrderItem(item), ChangeCount = changes, IsSuccessful = true
            });
        }
        public async Task <Result <ExpectedOrderItem> > AddExpectedOrderItem(ExpectedOrderItemContext context)
        {
            var item = await _dbContext.ExpectedOrderItems.FindAsync(context.OrderItemId);

            if (item != null)
            {
                _logger.LogInformation($"Order item {context.OrderItemId} already exists.");

                return(new Result <ExpectedOrderItem> {
                    Value = null, IsSuccessful = false
                });
            }

            var entity = MapAddExpectedOrderItemContext(context);

            await _dbContext.ExpectedOrderItems.AddAsync(entity);

            int changes = await _dbContext.SaveChangesAsync();

            if (changes <= 0)
            {
                _logger.LogInformation($"Order item {context.OrderItemId} could not be saved.");

                return(new Result <ExpectedOrderItem> {
                    Reason = ReasonType.DatabaseError, ChangeCount = changes, IsSuccessful = false
                });
            }

            _logger.LogInformation($"Order item {context.OrderItemId} was saved.");

            return(new Result <ExpectedOrderItem> {
                Value = MapToExpectedOrderItem(entity), ChangeCount = changes, IsSuccessful = true
            });
        }
        public async Task <Result <IReadOnlyList <ExpectedOrderItem> > > GetExpectedOrderItems(ExpectedOrderItemContext context)
        {
            var items = _dbContext.ExpectedOrderItems
                        .Where(x => x.OrderId == context.OrderId)
                        .ToList();

            _logger.LogInformation($"Returning the following order items associated with order {context.OrderId}.");

            var expectedOrderItems = MapToExpectedOrderItems(items).ToList();

            foreach (var orderItem in expectedOrderItems)
            {
                _logger.LogInformation($"Order Item {orderItem.OrderItemId}");
            }

            return(new Result <IReadOnlyList <ExpectedOrderItem> > {
                Value = expectedOrderItems, IsSuccessful = true
            });
        }
 ExpectedOrderItemEntity MapAddExpectedOrderItemContext(ExpectedOrderItemContext context) =>