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)));
        }
Esempio n. 2
0
        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)));
        }
Esempio n. 3
0
        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);
        }