Exemple #1
0
        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;
            }
        }
Exemple #2
0
 public void OnUpdateQuantity()
 {
     // alert any observers
     QuantityUpdated?.Invoke(_quantity);
 }