private IEnumerable <EventBase> Handle(OrderInTransit e) { OrderHistory orderInTransit = new OrderHistory(); orderInTransit.BookingOrderId = e.BookingId; orderInTransit.DateTime = e.Date.ToString(); orderInTransit.Description = e.Description; orderInTransit.OrderState = typeof(OrderInTransit).ToString(); orderHistory.Add(orderInTransit); return(new EventBase[] { e }); }
public async Task Handle(OrderTransitIntegrationEvent eventMsg) { List <EventBase> events = new List <EventBase>(); if (eventMsg.Id != Guid.Empty) { try { Track trackings = await _trackingContext.GetTrackingAsync(eventMsg.BookingId); if (trackings == null) { trackings = new Track(); } var messageType = _assemblyTypes .Where(t => t.Name.Contains("OrderInTransit")).FirstOrDefault(). Name.ToString(); OrderInTransit orderInTransit = new OrderInTransit(eventMsg.BookingId, eventMsg.Description, eventMsg.Id , messageType, eventMsg.CreationDate); events.AddRange(trackings.OrderInTransit(orderInTransit)); trackings.Version = trackings.OriginalVersion + 1; await _trackingContext.SaveTrackingAsync(eventMsg.BookingId, trackings.OriginalVersion, trackings.Version, events); //Publish the event here //Create Integration Event var orderStatusChanged = new OrderStatusChangedIntegrationEvent(eventMsg.BookingId, "OrderInTransit"); _eventBus.Publish(orderStatusChanged); } catch (Exception e) { var ExceptionTelemetry = new ExceptionTelemetry(e); ExceptionTelemetry.Properties.Add("OrderTransitIntegrationEvent", eventMsg.BookingId); ExceptionTelemetry.SeverityLevel = SeverityLevel.Critical; telemetry.TrackException(ExceptionTelemetry); throw; //Throw exception for service bus to abandon the message } } }
public async Task UpdateBookingModelInCache(Message msg) { RedisCacheService rCache = new RedisCacheService(); List <EventBase> events = new List <EventBase>(); Track tracking = new Track(); var bookingId = string.Empty; List <OrderHistory> trackingHistory = new List <OrderHistory>(); try { if (msg.Label == "BookingAdd") { BookingAddIntegrationEvent eventMsg = JsonConvert.DeserializeObject <BookingAddIntegrationEvent>(Encoding.UTF8.GetString(msg.Body)); string messageType = "BookingCreated"; BookingCreated bookingCreated = new BookingCreated(eventMsg.BookingId, string.Empty, eventMsg.Id , messageType, eventMsg.CreationDate, eventMsg.Origin, eventMsg.Destination); bookingId = eventMsg.BookingId; tracking.BookingAdd(bookingCreated); } else if (msg.Label == "OrderPicked") { OrderPickedIntegrationEvent eventMsg = JsonConvert.DeserializeObject <OrderPickedIntegrationEvent>(Encoding.UTF8.GetString(msg.Body)); string messageType = "OrderPicked"; OrderPicked orderPicked = new OrderPicked(eventMsg.BookingId, eventMsg.Description, eventMsg.Id , messageType, eventMsg.CreationDate); bookingId = eventMsg.BookingId; tracking.OrderPicked(orderPicked); } else if (msg.Label == "OrderTransit") { OrderTransitIntegrationEvent eventMsg = JsonConvert.DeserializeObject <OrderTransitIntegrationEvent>(Encoding.UTF8.GetString(msg.Body)); string messageType = "OrderInTransit"; OrderInTransit orderInTransit = new OrderInTransit(eventMsg.BookingId, eventMsg.Description, eventMsg.Id , messageType, eventMsg.CreationDate); bookingId = eventMsg.BookingId; tracking.OrderInTransit(orderInTransit); } else if (msg.Label == "OrderDelivered") { OrderDeliveredIntegrationEvent eventMsg = JsonConvert.DeserializeObject <OrderDeliveredIntegrationEvent>(Encoding.UTF8.GetString(msg.Body)); string messageType = "OrderDelivered"; OrderDelivered orderDelivered = new OrderDelivered(eventMsg.BookingId, eventMsg.Description, eventMsg.Id , messageType, eventMsg.CreationDate, eventMsg.SignedBy); bookingId = eventMsg.BookingId; tracking.OrderDelivered(orderDelivered); } else if (msg.Label == "PaymentProcessed") { PaymentProcessedIntegrationEvent eventMsg = JsonConvert.DeserializeObject <PaymentProcessedIntegrationEvent>(Encoding.UTF8.GetString(msg.Body)); string messageType = "PaymentProcessed"; string description = string.Empty; if (eventMsg.PaymentStatus == PaymetStatus.Completed) { description = "Payment Done"; } else if (eventMsg.PaymentStatus == PaymetStatus.Canceled) { description = "Payment Failed"; } else if (eventMsg.PaymentStatus == PaymetStatus.Pending) { description = "Payment Pending"; } PaymentProcessed eventPaymentProcessed = new PaymentProcessed(eventMsg.BookingOrderId, description, eventMsg.Id, messageType, eventMsg.CreationDate); bookingId = eventMsg.BookingOrderId; tracking.PaymentProcessed(eventPaymentProcessed); } //If Booking ID Exists if (!string.IsNullOrEmpty(bookingId)) { if (!string.IsNullOrEmpty(rCache.Get(bookingId))) { trackingHistory = JsonConvert.DeserializeObject <List <OrderHistory> >(rCache.Get(bookingId)); } //Append new event to old events trackingHistory.AddRange(tracking.orderHistory); //Serialze the result var result = JsonConvert.SerializeObject(trackingHistory); await rCache.Remove(bookingId); //Update the Cache if (!string.IsNullOrEmpty(result)) { await rCache.Save(bookingId, result); } } } catch (Exception ex) { throw ex; } }
public IEnumerable <EventBase> OrderInTransit(OrderInTransit e) { return(HandleEvent(e)); }