public JsonResult OrderReservation(OrderReservationRequestFrontEnd request) { string sessionInfo = GetSessionData("OrderReservation"); OrderReservation orderReservation = new OrderReservation(request, sessionInfo, new ProjectConfigData()); return(Json(orderReservation.Response)); }
private void btn_OrderReservation_Click(object sender, EventArgs e) { List <string> orders = new List <string>(); orders.Add(Guid.NewGuid().ToString()); orders.Add(Guid.NewGuid().ToString()); orders.Add(Guid.NewGuid().ToString()); orders.Add(Guid.NewGuid().ToString()); orders.Add(Guid.NewGuid().ToString()); OrderReservationRequestFrontEnd orderRequest = new OrderReservationRequestFrontEnd() { photoProcessId = orders, requestId = Guid.NewGuid().ToString(), sessionId = Guid.NewGuid().ToString() }; OrderReservation orderReservation = new OrderReservation(orderRequest, "SESSION INFO", new ProjectConfigData()); }
public async Task <ActionResult <Guid> > OnReservationFailed(OrderReservation reservation, [FromServices] DaprClient daprClient) { var state = await daprClient.GetStateEntryAsync <OrderState>(StoreName, reservation.OrderId.ToString()); if (state.Value == null) { return(this.NotFound()); } state.Value.Status = "reservation failed"; state.Value.UpdatedOn = DateTime.UtcNow; await state.SaveAsync(); Console.WriteLine($"Acknowledged reservation failed for order {reservation.OrderId}"); return(this.Ok()); }
public async Task <ActionResult <OrderReservation> > ReserveOrder(Order order, [FromServices] DaprClient daprClient) { // retrieve state of whole reservation request var stateReservation = await daprClient.GetStateEntryAsync <ReservationState>(StoreName_reservation, order.Id.ToString()); stateReservation.Value ??= new ReservationState() { OrderId = order.Id, ReservedItems = new List <ItemReservation>() }; var result = new OrderReservation() { OrderId = order.Id, ReservedItems = new List <Item>() }; // iterate over state of each reservation item foreach (var item in order.Items) { var SKU = item.ProductCode; var quantity = item.Quantity; var actorID = new ActorId(SKU); var proxy = ActorProxy.Create <IReservationItemActor>(actorID, "ReservationItemActor"); var balanceQuantity = await proxy.AddReservation(quantity); // compose result result.ReservedItems.Add(new Item { SKU = SKU, BalanceQuantity = balanceQuantity }); // save updated reservation state stateReservation.Value.ReservedItems.Add(new ItemReservation() { SKU = SKU, Quantity = quantity, ReservedOn = DateTime.UtcNow }); await stateReservation.SaveAsync(); Console.WriteLine($"Reservation in {stateReservation.Value.OrderId} of {SKU} for {quantity}, balance {balanceQuantity}"); } await daprClient.PublishEventAsync <Order>(PubSub, common.Topics.ReservationCompletedTopicName, order); Console.WriteLine($"Reservation in {stateReservation.Value.OrderId} completed"); return(this.Ok()); }
public async Task <ActionResult <OrderReservation> > ReserveOrder(Order order, [FromServices] DaprClient daprClient) { // retrieve state of whole reservation request var stateReservation = await daprClient.GetStateEntryAsync <ReservationState>(StoreName_reservation, order.Id.ToString()); stateReservation.Value ??= new ReservationState() { OrderId = order.Id, ReservedItems = new List <ItemReservation>() }; var result = new OrderReservation() { OrderId = order.Id, ReservedItems = new List <Item>() }; // iterate over state of each reservation item foreach (var item in order.Items) { var SKU = item.ProductCode; var quantity = item.Quantity; var stateItem = await daprClient.GetStateEntryAsync <ItemState>(StoreName_item, SKU); stateItem.Value ??= new ItemState() { SKU = SKU, Changes = new List <ItemReservation>() }; // update balance stateItem.Value.BalanceQuantity -= quantity; // record change ItemReservation change = new ItemReservation() { SKU = SKU, Quantity = quantity, ReservedOn = DateTime.UtcNow }; stateItem.Value.Changes.Add(change); // keep only the 10 latest changes if (stateItem.Value.Changes.Count > 10) { stateItem.Value.Changes.RemoveAt(0); } // save item state await stateItem.SaveAsync(); // compose result result.ReservedItems.Add(new Item { SKU = SKU, BalanceQuantity = stateItem.Value.BalanceQuantity }); // save updated reservation state stateReservation.Value.ReservedItems.Add(change); await stateReservation.SaveAsync(); Console.WriteLine($"Reservation in {stateReservation.Value.OrderId} of {SKU} for {quantity}, balance {stateItem.Value.BalanceQuantity}"); } await daprClient.PublishEventAsync <Order>(PubSub, common.Topics.ReservationCompletedTopicName, order); Console.WriteLine($"Reservation in {stateReservation.Value.OrderId} completed"); return(this.Ok()); }