public void ChangeOrderStatus(IOrderStateMachine orderStateMachine, OrderStatuses targetOrderStatus) { var previousOrderStatus = OrderStatus; orderStateMachine.ChangeOrderStatus(targetOrderStatus); OrderStatus = targetOrderStatus; OrderStatusChangedEvent orderStatusChangedEvent = OrderStatusChangedEvent.Create(previousOrderStatus, this); AddDomainEvent(orderStatusChangedEvent); }
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); }); }
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); }
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(); } ); }
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)); }