예제 #1
0
        public async Task PayV1(string orderId, string correlationId)
        {
            var state = new Domain.Model.Payment.V1.Payment(StreamNumbering.NewStreamId <Domain.Model.Payment.V1.Payment>());
            var order = await this.persistence.GetState <DomainOrder>(orderId);

            var payed = new Domain.BusinessLogic.Payment.V1.PayForOrder(correlationId, DateTime.Now)
            {
                OrderStreamId = order.StreamId,
                Amount        = order.TotalCost
            }.Execute(state);

            await this.persistence.Save(payed);
        }
예제 #2
0
        public async Task DispatchOrder(string orderId, string paymentId, string correlationId)
        {
            var state = new DomainDispatch(StreamNumbering.NewStreamId <DomainDispatch>());
            var order = await this.persistence.GetState <DomainOrder>(orderId);

            var dispatched = new DispatchOrder(correlationId, DateTime.Now)
            {
                PaymentStreamId = paymentId,
                OrderStreamId   = orderId,
                Items           = order.Items
            }.Execute(state);

            await this.persistence.Save(dispatched);
        }
예제 #3
0
        public async Task Pay(string orderId, string correlationId)
        {
            var state = new Domain.Model.Payment.Payment(StreamNumbering.NewStreamId <Domain.Model.Payment.Payment>());
            var order = await this.persistence.GetState <DomainOrder>(orderId);

            var payed = new PayForOrder(correlationId, DateTime.Now)
            {
                OrderStreamId = order.StreamId,
                Total         = order.TotalCost,
                Description   = order.Items.Aggregate((acc, x) => acc + ',' + x)
            }.Execute(state);

            await this.persistence.Save(payed);

            var _ = myPay.SendPaymentRequest(payed.StreamId, payed.Total, payed.Description).ConfigureAwait(false);
        }
예제 #4
0
        public static async Task Run()
        {
            var orderId       = StreamNumbering.NewStreamId <Order>();
            var correlationId = StreamNumbering.NewCorrelationId();

            await Delayer.WaitSomeTime();

            await AppClient.AddItem(orderId, correlationId, "Apple", 3.00m);

            Console.WriteLine($"[{correlationId}/{orderId}] Adding apple - 3.00");

            await Delayer.WaitSomeTime();

            await AppClient.AddItem(orderId, correlationId, "Carrot", 2.50m);

            Console.WriteLine($"[{correlationId}/{orderId}] Adding carrot - 2.50");

            await Delayer.WaitSomeTime();

            await AppClient.Checkout(orderId, correlationId);

            Console.WriteLine($"[{correlationId}/{orderId}] Checkout");
        }