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