Пример #1
0
        public Order Create(UserId userId, ShoppingCartId cartId)
        {
            var basket = this.basketRepository.GetBasket(userId);
            var id     = this.idGenerator.Next();

            return(new Order(id, basket));
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
    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());
 }
Пример #6
0
    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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
 => Apply(new ShoppingCartCreated(ShoppingCartId, userId, createdOn));
Пример #12
0
 public override int GetHashCode()
 {
     return(ShoppingCartId.GetHashCode());
 }
Пример #13
0
        public ShoppingCartId?ConvertNullableTo(String?value)
        {
            ShoppingCartId.TryParse(value, out ShoppingCartId? result);

            return(result);
        }
Пример #14
0
 public ShoppingCartId ConvertTo(String value)
 {
     return(ShoppingCartId.Parse(value));
 }
Пример #15
0
 public String ConvertFrom(ShoppingCartId value)
 {
     return(value.ToString());
 }
 public ShoppingCart(ShoppingCartId id) 
     : this()
 {
     ApplyChange(new StartedShopping { CartId = id });
 }
Пример #17
0
 public ShoppingCartCreated(ShoppingCartId id, ShopperId?shopperId)
 {
     Id        = id;
     ShopperId = shopperId;
 }
Пример #18
0
 public async Task MergeShoppingCartInto(ShoppingCartId targetShoppingCartId)
 {
     //await GrainFactory.GetGrain<IShoppingCartGrain>(targetShoppingCartId.Value).MergeShoppingCart();
     //raise event that shopping cart has been merged into.
 }
Пример #19
0
 public async Task MergeShoppingCart(ShoppingCartId sourceShoppingCartId, Dictionary <Product, ProductQuantity> listOfItems)
 {
     //_shoppingCart.MergeShoppingCart(sourceShoppingCartId, )
 }