public IHttpActionResult CreateProduct([FromBody] CreateProductModel model)
        {
            var id            = AggregateId.NewAggregateId(Guid.NewGuid());
            var versionNumber = AggregateVersion.NewExpected(0);
            var cmd           = Command.NewCreate(model.Name, model.Price);
            var envelope      = createCommand(id, versionNumber, null, null, null, cmd);

            QueueCommand(envelope);

            if (model.Quantity > 0)
            {
                cmd      = Command.NewAddToStock(model.Quantity);
                envelope = createCommand(id, AggregateVersion.Irrelevant, null, null, null, cmd);
                QueueCommand(envelope);
            }

            return(Ok(new ProductModel
            {
                Id = id.Item,
                Name = model.Name,
                Price = model.Price,
                Quantity = model.Quantity,
                Reserved = 0
            }));
        }
Beispiel #2
0
        public IHttpActionResult CreateBasket()
        {
            var basketId = Guid.NewGuid();
            var cmd      = Command.Create;
            var envelope = createCommand(AggregateId.NewAggregateId(basketId), AggregateVersion.NewExpected(0), null, null, null, cmd);

            var basket = CommitCommand(envelope);

            return(Ok(basket));
        }
Beispiel #3
0
        public IHttpActionResult Cancel([FromBody] CancelModel model)
        {
            var basketId = model.BasketId;
            var cmd      = Command.Cancel;
            var envelope = createCommand(AggregateId.NewAggregateId(basketId), AggregateVersion.Irrelevant, null, null, null, cmd);

            CommitCommand(envelope);

            return(Ok());
        }
Beispiel #4
0
        public IHttpActionResult RemoveItem([FromBody] RemoveItemModel model)
        {
            var basketId  = model.BasketId;
            var productId = model.ProductId;
            var cmd       = Command.NewRemoveItem(ProductId.NewProductId(productId), model.Quantity);
            var envelope  = createCommand(AggregateId.NewAggregateId(basketId), AggregateVersion.Irrelevant, null, null, null, cmd);

            var basket = CommitCommand(envelope);

            return(Ok(basket));
        }
        public IHttpActionResult DeliverOrder([FromBody] GuidModel model)
        {
            var id        = AggregateId.NewAggregateId(model.OrderId);
            var processId = FSharpOption <ProcessId> .Some(ProcessId.NewProcessId(model.ProcessId));

            var cmd      = Command.Deliver;
            var envelope = createCommand(id, AggregateVersion.Irrelevant, null, null, processId, cmd);

            QueueCommand(envelope);

            return(Ok());
        }
Beispiel #6
0
        private BasketModel GetBasketAggregate(Guid basketId)
        {
            var res = Reader.getBasket(AggregateId.NewAggregateId(basketId));

            if (res.IsOk)
            {
                var b = (res as Result <State, IError> .Ok).Item1;
                return(BasketModel.FromAggregate(basketId, b));
            }

            return(null);
        }
Beispiel #7
0
        public IHttpActionResult CheckOut([FromBody] CheckOutModel model)
        {
            var basketId  = model.BasketId;
            var address   = model.ShippingAddress;
            var cmd       = Command.NewCheckOut(ShippingAddress.NewShippingAddress(address));
            var processId = FSharpOption <ProcessId> .Some(ProcessId.NewProcessId(Guid.NewGuid()));

            var envelope = createCommand(AggregateId.NewAggregateId(basketId), AggregateVersion.Irrelevant, null, null, processId, cmd);

            var basket = CommitCommand(envelope);

            return(Ok(basket));
        }
        public IHttpActionResult ChangeQuantity([FromBody] ChangeQuantityModel model)
        {
            var id            = AggregateId.NewAggregateId(model.Id);
            var versionNumber = AggregateVersion.Irrelevant;
            var cmd           = model.Difference >= 0
                ? Command.NewAddToStock(model.Difference)
                : Command.NewRemoveFromStock(model.Difference);

            var envelope = createCommand(id, versionNumber, null, null, null, cmd);

            QueueCommand(envelope);

            return(Ok());
        }
Beispiel #9
0
        public IHttpActionResult AddItem([FromBody] AddItemModel model)
        {
            var basketId = model.BasketId;

            if (model.BasketId == Guid.Empty)
            {
                basketId = Guid.NewGuid();
                var cmd      = Command.Create;
                var envelope = createCommand(AggregateId.NewAggregateId(basketId), AggregateVersion.NewExpected(0), null, null, null, cmd);

                CommitCommand(envelope);
            }

            // TODO: get model price and name from api by id
            var productId   = model.ProductId;
            var item        = new BasketItem(ProductId.NewProductId(productId), model.Name, model.Price, model.Quantity);
            var addCmd      = Command.NewAddItem(item);
            var addEnvelope = createCommand(AggregateId.NewAggregateId(basketId), AggregateVersion.Irrelevant, null, null, null, addCmd);

            var basket = CommitCommand(addEnvelope);

            return(Ok(basket));
        }