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 })); }
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)); }
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()); }
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()); }
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); }
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()); }
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)); }