예제 #1
0
        protected override void OnCommand(object message)
        {
            switch (message)
            {
            case SetDelivery m:
            {
                var deliverySet = new DeliveryMethodSet(m.OrderId, m.DeliveryTypeId);
                Persist(deliverySet, @event =>
                    {
                        SetDelivery(@event);
                        SaveSnapshotIfNeeded();
                        Context.PublishEvent(@event);
                    });
            }
            break;

            case SetPayment m:
            {
                var paymentSet = new PaymentMethodSet(m.OrderId, m.PaymentTypeId);
                Persist(paymentSet, @event =>
                    {
                        SetPayment(@event);
                        SaveSnapshotIfNeeded();
                        Context.PublishEvent(@event);
                    });
            }
            break;

            case DiscardOrder m:
            {
                var orderDiscarded = new OrderDiscarded(m.OrderId, _state.CustomerId);
                Persist(orderDiscarded, @event =>
                    {
                        DiscardOrder(@event);
                        SaveSnapshotIfNeeded();
                        Context.PublishEvent(@event);
                    });
            }
            break;

            case CommitOrder m:
            {
                var orderCommited = new OrderCommited(m.OrderId, _state.CustomerId);
                Persist(orderCommited, @event =>
                    {
                        CommitOrder(@event);
                        SaveSnapshotIfNeeded();
                        Context.PublishEvent(@event);
                    });
            }
            break;

            case CompleteOrder m:
            {
                var orderCompleted = new OrderCompleted(m.OrderId, _state.CustomerId);
                Persist(orderCompleted, @event =>
                    {
                        CompleteOrder(@event);
                        SaveSnapshotIfNeeded();
                        Context.PublishEvent(@event);
                    });
            }
            break;

            case ReserveTicket m:
            {
                var ticketReserved = new TicketReserved(
                    m.OrderId,
                    m.CustomerId,
                    m.TicketId,
                    m.EventId,
                    m.PriceOptionId,
                    m.SceneSeatId,
                    m.PriceZoneName,
                    m.PriceOptionName,
                    m.GrossAmount);

                Persist(ticketReserved, @event =>
                    {
                        ReserveTicket(@event);
                        SaveSnapshotIfNeeded();
                        Context.PublishEvent(@event);
                    });
            }
            break;

            case RemoveTicket m:
            {
                var ticketRemoved = new TicketRemoved(m.OrderId, m.CustomerId, m.EventId, m.TicketId);

                Persist(ticketRemoved, @event =>
                    {
                        RemoveTicket(@event);
                        SaveSnapshotIfNeeded();
                        Context.PublishEvent(@event);
                    });
            }
            break;

            case Terminated m:
            {
            }
            break;

            default:
                Unhandled(message);
                break;
            }
        }
 private void Handle(DeliveryMethodSet @event)
 {
     _state.DeliveryTypeId = @event.DeliveryMethodId;
 }
예제 #3
0
 private void SetDelivery(DeliveryMethodSet m)
 {
     _state.DeliveryMethodId = m.DeliveryMethodId;
 }