示例#1
0
        public async Task Handle(OrderProcessedIntegrationEvent result)
        {
            var orderStatus = await _stateStore.GetStateAsync <OrderStatus>(result.OrderId.ToString());

            if (orderStatus != null && orderStatus.Status != "Processed")
            {
                throw new Exception("Could not process order due to invalid status - " + orderStatus.Status);
            }

            var facesData  = result.Faces;
            var rootFolder = AppContext.BaseDirectory;

            Console.WriteLine("Root Directory is - " + rootFolder);
            if (facesData.Count < 1)
            {
                await Console.Out.WriteLineAsync($"No Faces Detected");
            }
            else
            {
                int j = 0;
                foreach (var face in facesData)
                {
                    MemoryStream ms    = new(face);
                    var          image = Image.Load(ms.ToArray());
                    image.Save(rootFolder + "face" + j + ".jpg");
                    j++;
                }
            }
            var dispatchedOrder = new OrderDispatchedIntegrationEvent
            {
                DispachtedDateTime = DateTime.UtcNow,
                OrderId            = result.OrderId
            };
            await _eventBus.PublishAsync <OrderDispatchedIntegrationEvent>(dispatchedOrder);
        }
        private async void UpdateOrderStatusAsync(Guid orderId, Status status)
        {
            var prevOrderStatus = await _stateStore.GetStateAsync <OrderStatus>(orderId.ToString());

            bool shouldUpdateOrderStatus = (prevOrderStatus == null) || status.ToString() switch
            {
                "Registered" => !prevOrderStatus.Status.Equals("Processed") &&
                !prevOrderStatus.Status.Equals("Sent"),
                "Processed" => !prevOrderStatus.Status.Equals("Sent"),
                "Sent" => !prevOrderStatus.Status.Equals("Sent"),
                _ => false,
            };

            if (shouldUpdateOrderStatus)
            {
                if (prevOrderStatus == null)
                {
                    prevOrderStatus = new OrderStatus
                    {
                        OrderId = orderId,
                        Status  = status.ToString()
                    };
                }
                else
                {
                    prevOrderStatus.Status = status.ToString();
                }
                await _stateStore.UpdateStateAsync(prevOrderStatus, orderId.ToString());
            }
            else
            {
                throw new Exception("Invalid Order Status");
            }
        }