public IHttpActionResult CheckOut([FromBody] CheckOutModel model) { var cmd = new CheckOutBasket(model.BasketId, model.ShippingAddress); var basket = _commandDispatcher.ExecuteCommand <BasketAggregate>(cmd); return(Ok(BasketModel.FromAggregate(basket))); }
public async Task <IActionResult> CheckOut([FromBody] CheckOutModel model) { var useCase = new CheckOutBasket( model.BasketId, new AddressDto( model.ShippingAddress.StreetAndNumber, model.ShippingAddress.ZipAndCity, model.ShippingAddress.StateOrProvince, model.ShippingAddress.Country ) ); var cmd = new Command <CheckOutBasket>(useCase); var basket = await _commandHandler.Execute <CheckedOutBasket>(cmd); return(Ok(BasketModel.FromAggregateRoot(basket))); }
internal void CheckOut(CheckOutBasket cmd) { if (cmd.ShippingAddress == null) { throw new DomainException(cmd.AggregateId, $"Cannot check out, address is null"); } if (State == BasketState.CheckedOut || !OrderLines.Any()) { return; } if (State != BasketState.Pending) { throw new InvalidStateException(cmd.AggregateId, $"Cannot check out, basket is {State}"); } RaiseEvent(new BasketCheckedOut(cmd.AggregateId, OrderLines, cmd.ShippingAddress)); }
public void When_CheckOut_CheckedOut() { Given(InitialEvents.ToArray()); var command = new CheckOutBasket(id, shippingAddress); command.Metadata.CausationId = command.Metadata.CommandId; command.Metadata.CorrelationId = causationAndCorrelationId; command.Metadata.ProcessId = causationAndCorrelationId; When(command); var expectedEvent = new BasketCheckedOut(id, OrderLines, shippingAddress); expectedEvent.Metadata.CausationId = command.Metadata.CommandId; expectedEvent.Metadata.CorrelationId = causationAndCorrelationId; expectedEvent.Metadata.ProcessId = command.Metadata.ProcessId; Then(expectedEvent); }