public async Task ReceiveAsync(IContext context) { switch (context.Message) { case Started _: await persistence.RecoverStateAsync(); break; case GetItems msg: context.Respond(new ShoppingListDto { Items = State.Items .Skip((msg.PageNumber - 1) * msg.PageSize) .Take(msg.PageSize) .Select(i => new ShoppingListItemDto { Name = i.Name, Quantity = i.Quantity }), Count = State.Items.Count }); break; case GetItem msg: context.Respond(State.GetItemByName(msg.Name)); break; case AddItem msg: { var @event = new ItemAdded(msg.Name, msg.Quantity); await persistence.PersistEventAsync(@event) .ContinueWith(t => persistence.PersistSnapshotAsync(State)) .ContinueWith(t => context.Respond(@event)); } break; case UpdateQuantity msg: { var @event = new QuantityUpdated(msg.Name, msg.Quantity); await persistence.PersistEventAsync(@event) .ContinueWith(t => persistence.PersistSnapshotAsync(State)) .ContinueWith(t => context.Respond(@event)); } break; case RemoveItem msg: { var @event = new ItemRemoved(msg.Name); await persistence.PersistEventAsync(@event) .ContinueWith(t => persistence.PersistSnapshotAsync(State)) .ContinueWith(t => context.Respond(@event)); } break; } }
public void OnUpdateQuantity() { // alert any observers QuantityUpdated?.Invoke(_quantity); }