コード例 #1
0
        public void ChangeOrderStatus(IOrderStateMachine orderStateMachine, OrderStatuses targetOrderStatus)
        {
            var previousOrderStatus = OrderStatus;

            orderStateMachine.ChangeOrderStatus(targetOrderStatus);
            OrderStatus = targetOrderStatus;
            OrderStatusChangedEvent orderStatusChangedEvent = OrderStatusChangedEvent.Create(previousOrderStatus, this);

            AddDomainEvent(orderStatusChangedEvent);
        }
コード例 #2
0
        public async Task Consume(ConsumeContext <PaymentCompletedEvent> context)
        {
            PaymentCompletedEvent paymentCompletedEvent = context.Message;
            long orderId = long.Parse(paymentCompletedEvent.CorrelationId);

            await _distributedLockManager.LockAsync(OrderOperationKey(orderId),
                                                    async() =>
            {
                IOrderStateMachine orderStateMachine = await _orderStateMachineFactory.BuildOrderStateMachineAsync(orderId);
                orderStateMachine.ChangePaymentStatus(PaymentStatuses.Completed);
            });
        }
コード例 #3
0
        public async Task <bool> Handle(SetOrderAsShippedCommand request, CancellationToken cancellationToken)
        {
            ExpressionSpecification <Order> specification = new OrderIdIs(request.OrderId);

            var   orderRepository = _orderDbContext.OrderRepository;
            Order order           = await orderRepository.GetFirstAsync(specification, cancellationToken);

            IOrderStateMachine orderStateMachine = _orderStateMachineFactory.Generate(order);

            order.ChangeOrderStatus(orderStateMachine, OrderStatuses.Shipped);

            return(true);
        }
コード例 #4
0
        public async Task Consume(ConsumeContext <ShipmentCreatedEvent> context)
        {
            ShipmentCreatedEvent shipmentCreatedEvent = context.Message;
            long orderId = long.Parse(shipmentCreatedEvent.CorrelationId);

            await _distributedLockManager.LockAsync(OrderOperationKey(orderId),
                                                    async() =>
            {
                IOrderStateMachine orderStateMachine = await _orderStateMachineFactory.BuildOrderStateMachineAsync(orderId);
                orderStateMachine.SetAsOrderShipped();
            }
                                                    );
        }
コード例 #5
0
        public async Task <IActionResult> PostOrder([FromBody] PostOrderRequest postOrderRequest)
        {
            if (postOrderRequest == null)
            {
                throw new RequestNullException();
            }

            IOrderStateMachine orderStateMachine = await _orderStateMachineFactory.CreateOrderStateMachineAsync(postOrderRequest.BuyerName, postOrderRequest.BuyerAddress, postOrderRequest.TotalAmount);

            orderStateMachine.SubmitOrder();

            return(StatusCode((int)HttpStatusCode.Created, orderStateMachine.OrderResponse));
        }