public OrderShouldBePaidBeforeShip(OrderState order) { Order = order; }
public static OrderState.Result AddOrderItem(OrderState state, OrderItemId itemId, ProductId productId, decimal unitPrice, decimal discount) => state.ApplyEvent(new OrderItemAddedEvent(itemId, state.Id, productId, unitPrice, discount));
public static OrderState.Result CancelOrder(OrderState state) => state.ApplyEvent(new OrderCancelledEvent(state.Id));
public static OrderState.Result PayOrder(OrderState state) => state.ApplyEvent(new OrderPaidEvent(state.Id));
public static OrderState.Result ShipOrder(OrderState state) => state.ThrowsIf(s => s.OrderStatus != OrderStatus.Paid, new OrderNotPaidYetException(state.Id)) .Then(s => s.ApplyEvent(new OrderShippedEvent(state.Id)));
public static OrderState.Result ShipOrder(OrderState state, IOrderPolicy policy) => state.With(s => policy.Apply(new OrderShouldBePaidBeforeShip(s))) .AndThen(s => s.ApplyEvent(new OrderShippedEvent(s.Id)));