public async Task Execute(BehaviorContext <OrderState, OrderItemPrepared> context, Behavior <OrderState, OrderItemPrepared> next) { Log.Information($"Courier State Machine - {nameof(OrderItemsBeingPreparedActivity)}"); var items = _db.ExpectedOrderItems .Where(x => x.OrderId == context.Data.OrderId); var item = await items.FirstOrDefaultAsync(x => x.CorrelationId == context.Data.OrderItemId); if (item != null) { item.Status = context.Data.Status; item.Timestamp = context.Data.Timestamp; _db.Update(item); } // for (int i = 0; i < items.Count; i++) // { // if (items[i].CorrelationId != context.Data.OrderItemId) // continue; // // items[i].Status = context.Data.Status; // items[i].Timestamp = context.Data.Timestamp; // break; // } int changes = await _db.SaveChangesAsync(); context.Instance.ActualItemCount = items .Count(x => x.Status == (int)OrderItemStatus.Prepared); await next.Execute(context).ConfigureAwait(false); }
public async Task Execute(BehaviorContext <OrderState, PrepareOrder> context, Behavior <OrderState, PrepareOrder> next) { Log.Information($"Courier State Machine - {nameof(PrepareOrderRequestedActivity)}"); context.Instance.CustomerId = context.Data.CustomerId; context.Instance.RestaurantId = context.Data.RestaurantId; context.Instance.ExpectedItemCount = context.Data.Items.Length; context.Instance.ActualItemCount = 0; // context.Instance.Items = items; context.Instance.Timestamp = DateTime.Now; var items = context.Data.Items.MapExpectedOrderItems(context.Data.OrderId); await _db.ExpectedOrderItems.AddRangeAsync(items); int addCount = await _db.SaveChangesAsync(); // fork each item in order to be prepared for (int i = 0; i < context.Data.Items.Length; i++) { await _context.Publish <PrepareOrderItemRequested>(new { context.Data.OrderId, context.Data.RestaurantId, context.Data.Items[i].MenuItemId, context.Data.Items[i].SpecialInstructions }); } await next.Execute(context).ConfigureAwait(false); }
public async Task Execute(BehaviorContext <OrderState, OrderCanceled> context, Behavior <OrderState, OrderCanceled> next) { var items = _db.ExpectedOrderItems .Where(x => x.OrderId == context.Data.OrderId) .ToList(); foreach (var item in items) { item.Status = (int)OrderItemStatus.Canceled; _db.ExpectedOrderItems.Update(item); } int changes = await _db.SaveChangesAsync(); context.Instance.Timestamp = DateTime.Now; await next.Execute(context).ConfigureAwait(false); }