public Order Create(UserId userId, ShoppingCartId cartId) { var basket = this.basketRepository.GetBasket(userId); var id = this.idGenerator.Next(); return(new Order(id, basket)); }
public static async Task OrderAsync() { Customer greatCustomer = null; Article article = null; Article article2 = null; greatCustomer = await GetOrCreateGreatCustomerAsync().ConfigureAwait(false); article = await GetOrCreateAggregateAsync <ArticleViewModel, Article>(readRepository, x => x.Articlenumber == "A12345", () => new Article(ArticleId.Generate(), "A12345", "A great article", Money.EUR(99.99m))) .ConfigureAwait(false); article2 = await GetOrCreateAggregateAsync <ArticleViewModel, Article>(readRepository, x => x.Articlenumber == "B12345", () => new Article(ArticleId.Generate(), "B12345", "Another great article", Money.EUR(59.99m))) .ConfigureAwait(false); var shoppingCart = new ShoppingCart(ShoppingCartId.Generate(), greatCustomer.Id, greatCustomer.StateModel.Name); var shoppingCartArticle1 = await shoppingCart.PlaceArticleAsync(ShoppingCartArticleId.Generate(shoppingCart.Id), article.Id, 1, repository); await shoppingCart.PlaceArticleAsync(ShoppingCartArticleId.Generate(shoppingCart.Id), article2.Id, 1, repository); shoppingCartArticle1.RemoveFromShoppingCart(); shoppingCart.Order(repository); await repository.SaveAsync(shoppingCart); var projection = CustomerState.LoadState(greatCustomer.StateModel); }
public static bool Equals(ShoppingCartCriteria?left, ShoppingCartCriteria?right) { bool result = ShoppingCartId.Equals(left?.ShoppingCartId, right?.ShoppingCartId); result &= (result ? SalesPointId.Equals(left?.SalesPointId, right?.SalesPointId) : false); result &= (result ? ViewPointId.Equals(left?.ViewPointId, right?.ViewPointId) : false); result &= (result ? SalesPersonId.Equals(left?.SalesPersonId, right?.SalesPersonId) : false); result &= (result ? CustomerId.Equals(left?.CustomerId, right?.CustomerId) : false); return(result); }
public void Should_BeBackwardCompatible() { // Given var @event = new ShoppingCartInitialized(Guid.NewGuid(), Guid.NewGuid(), ShoppingCartStatus.Pending); var json = JsonSerializer.Serialize(@event); // When var oldEvent = JsonSerializer.Deserialize <V1.ShoppingCartInitialized>(json); oldEvent.Should().NotBeNull(); oldEvent !.ShoppingCartId.Should().Be(@event.ShoppingCartId); oldEvent.ClientId.Should().Be(@event.ClientId); }
ShoppingCart() { Register<StartedShopping>(_ => { _id = new ShoppingCartId(_.CartId); _checkedOut = false; _items = new Items(); }); Register<CheckedoutCart>(_ => _checkedOut = true); Register<AddedItemToCart>(_ => _items.Add(new Item(new ItemId(_.ItemId), _.Count))); Register<RemovedItemFromCart>(_ => _items.Remove(new ItemId(_.ItemId))); Register<IncrementedItemCountInCart>(_ => _items.Get(new ItemId(_.ItemId)).Increment()); Register<DecrementedItemCountInCart>(_ => _items.Get(new ItemId(_.ItemId)).Decrement()); }
public void Should_BeForwardCompatible() { // Given var oldEvent = new V1.ShoppingCartInitialized(Guid.NewGuid(), Guid.NewGuid()); var json = JsonSerializer.Serialize(oldEvent); // When var @event = JsonSerializer.Deserialize <ShoppingCartInitialized>(json); @event.Should().NotBeNull(); @event !.ShoppingCartId.Should().Be(oldEvent.ShoppingCartId); @event.ClientId.Should().Be(oldEvent.ClientId); @event.Status.Should().Be(ShoppingCartStatus.Initialized); }
public void CreateReturnsNewOrder() { var john = new UserId("john"); var cartId = new ShoppingCartId(Guid.NewGuid().ToString()); var orderId = new OrderId(Guid.NewGuid().ToString()); var orderIdGenMock = new Mock <IOrderIdGenerator>(); var basketRepoMock = new Mock <IBasketRepository>(); orderIdGenMock.Setup(gen => gen.Next()).Returns(orderId); var sut = new OrderService(orderIdGenMock.Object, basketRepoMock.Object); var actual = sut.Create(john, cartId); Assert.Equal(orderId, actual.Id); }
public PaymentServiceTests() { this.cartId = new ShoppingCartId(Guid.NewGuid().ToString()); this.payment = new PaymentDetails(); this.orderSvcMock = new Mock <IOrderService>(); this.paymentGatewayMock = new Mock <IPaymentGateway>(); this.orderConfirmationStub = new Mock <IOrderConfirmation>(); var purchaseSystemStub = new Mock <IPurchaseSystem>().Object; this.inventory = new Inventory(purchaseSystemStub); this.inventory.Add(lordOfTheRings, 4, 10m); this.inventory.Add(hobbit, 4, 5m); this.sut = new PaymentService(orderSvcMock.Object, paymentGatewayMock.Object, this.inventory, this.orderConfirmationStub.Object); }
static void Main() { //Make sure you start an instance of EventStore before running this!! var credentials = new UserCredentials("admin", "changeit"); var connection = EventStoreConnection.Create( ConnectionSettings.Create(). UseConsoleLogger(). SetDefaultUserCredentials( credentials), new IPEndPoint(IPAddress.Loopback, 1113), "EventStoreShopping"); connection.Connect(); var unitOfWork = new UnitOfWork(); var repository = new Repository <ShoppingCart>( ShoppingCart.Factory, unitOfWork, connection, new EventReaderConfiguration( new SliceSize(512), new JsonDeserializer(), new PassThroughStreamNameResolver(), new FixedStreamUserCredentialsResolver(credentials))); //Handle Start Shopping command var id = new ShoppingCartId("shopping_at_boutique_" + DateTime.UtcNow.Ticks); repository.Add(id, new ShoppingCart(id)); //Handle Add Item command var cart1 = repository.Get(id); cart1.AddItem(new ItemId("pair_of_socks"), 2); //Handle Add Item command var cart2 = repository.Get(id); cart2.AddItem(new ItemId("pair_of_shirts"), 4); //Handle Remove Item command var cart3 = repository.Get(id); cart3.RemoveItem(new ItemId("pair_of_socks")); //Handle Increment Item Count command var cart4 = repository.Get(id); cart4.IncrementItemCount(new ItemId("pair_of_shirts")); //Handle Checkout command var cart5 = repository.Get(id); cart5.Checkout(); //Append to stream var affected = unitOfWork.GetChanges().Single(); connection.AppendToStream( affected.Identifier, affected.ExpectedVersion, affected.Root.GetChanges(). Select(_ => new EventData( Guid.NewGuid(), _.GetType().Name, true, ToJsonByteArray(_), new byte[0])), credentials); }
static void Main() { //Make sure you start an instance of EventStore before running this!! var credentials = new UserCredentials("admin", "changeit"); var connection = EventStoreConnection.Create( ConnectionSettings.Create(). UseConsoleLogger(). SetDefaultUserCredentials( credentials), new IPEndPoint(IPAddress.Loopback, 1113), "EventStoreShopping"); connection.Connect(); var unitOfWork = new UnitOfWork(); var repository = new Repository<ShoppingCart>( ShoppingCart.Factory, unitOfWork, connection, new EventReaderConfiguration( new SliceSize(512), new JsonDeserializer(), new PassThroughStreamNameResolver(), new FixedStreamUserCredentialsResolver(credentials))); //Handle Start Shopping command var id = new ShoppingCartId("shopping_at_boutique_" + DateTime.UtcNow.Ticks); repository.Add(id, new ShoppingCart(id)); //Handle Add Item command var cart1 = repository.Get(id); cart1.AddItem(new ItemId("pair_of_socks"), 2); //Handle Add Item command var cart2 = repository.Get(id); cart2.AddItem(new ItemId("pair_of_shirts"), 4); //Handle Remove Item command var cart3 = repository.Get(id); cart3.RemoveItem(new ItemId("pair_of_socks")); //Handle Increment Item Count command var cart4 = repository.Get(id); cart4.IncrementItemCount(new ItemId("pair_of_shirts")); //Handle Checkout command var cart5 = repository.Get(id); cart5.Checkout(); //Append to stream var affected = unitOfWork.GetChanges().Single(); connection.AppendToStream( affected.Identifier, affected.ExpectedVersion, affected.Root.GetChanges(). Select(_ => new EventData( Guid.NewGuid(), _.GetType().Name, true, ToJsonByteArray(_), new byte[0])), credentials); }
=> Apply(new ShoppingCartCreated(ShoppingCartId, userId, createdOn));
public override int GetHashCode() { return(ShoppingCartId.GetHashCode()); }
public ShoppingCartId?ConvertNullableTo(String?value) { ShoppingCartId.TryParse(value, out ShoppingCartId? result); return(result); }
public ShoppingCartId ConvertTo(String value) { return(ShoppingCartId.Parse(value)); }
public String ConvertFrom(ShoppingCartId value) { return(value.ToString()); }
public ShoppingCart(ShoppingCartId id) : this() { ApplyChange(new StartedShopping { CartId = id }); }
public ShoppingCartCreated(ShoppingCartId id, ShopperId?shopperId) { Id = id; ShopperId = shopperId; }
public async Task MergeShoppingCartInto(ShoppingCartId targetShoppingCartId) { //await GrainFactory.GetGrain<IShoppingCartGrain>(targetShoppingCartId.Value).MergeShoppingCart(); //raise event that shopping cart has been merged into. }
public async Task MergeShoppingCart(ShoppingCartId sourceShoppingCartId, Dictionary <Product, ProductQuantity> listOfItems) { //_shoppingCart.MergeShoppingCart(sourceShoppingCartId, ) }