/// <summary> /// This method will handle updates for a room /// </summary> /// <param name="roomChangeMessage">Room change message</param> private void Handle(RoomChangeMessage roomChangeMessage) { Logger.LogInfo("Message received room Business Id: {0}", null, roomChangeMessage.ProviderId); switch (roomChangeMessage.ChangeType) { //insert, update and delete of rooms should trigger a configuration update for the associated room type case ChangeType.Insert: case ChangeType.Delete: case ChangeType.Update: { var roomTypeChangeMessage = new RoomTypeChangeMessage(roomChangeMessage.ProviderId, roomChangeMessage.ProductTypeId, ChangeType.Update, RoomTypeChangeMessage.RoomTypeChangeType.Configuration); roomTypeMessageHandler.Handle(roomTypeChangeMessage); break; } } }
/// <summary> /// Process Room Changes /// </summary> /// <param name="queueItem">Queue Item</param> /// <param name="providerSubscriberOptInLookup">Provider Subscriber Opt In list</param> public bool ProcessChange(IQueueItem queueItem, ref ProviderSubscriberOptInsLookup providerSubscriberOptInLookup) { var roomChange = XmlSerialization.XmlDeserializeFromString<PushRoomUpdate>(queueItem.Payload); ChangeType changeType; RoomChangeType roomChangeType; Enum.TryParse(roomChange.Action, out roomChangeType); //all these actions trigger Handle with a RoomTypeConfigurationUpdate message but i think its still valid to differentiate them in case we need it in the future switch (roomChangeType) { case RoomChangeType.AddRoom: changeType = ChangeType.Insert; break; case RoomChangeType.ModifyRoom: //if we cant view the room online or it is not active then remove it if (!roomChange.IsAvailableOnline || !roomChange.IsActive) { changeType = ChangeType.Delete; } else { changeType = ChangeType.Update; } break; case RoomChangeType.DeleteRoom: changeType = ChangeType.Delete; break; default: return false; } var roomChangeMessage = new RoomChangeMessage(roomChange.BusinessId.ToGuid(), changeType, roomChange.RoomTypeId.ToGuid(ROOM_TYPE_PREFIX), roomChange.RoomId.ToGuid(ROOM_PREFIX)); bool isSuccess = true; foreach (var messagingIntegratorService in CreateServices(roomChangeMessage)) { isSuccess &= messagingIntegratorService.ProcessAndQueueChangeUpdates(providerSubscriberOptInLookup, roomChangeMessage); } return isSuccess; }
/// <summary> /// This method will handle updates for a room /// </summary> /// <param name="subscriberByOptinList">List of providers opted into AIG</param> /// <param name="roomChangeMessage">Room change message</param> /// <returns>True is successful otherwise False</returns> private bool HandleRoomUpdate(SubscriberByOptinList subscriberByOptinList, RoomChangeMessage roomChangeMessage) { switch (roomChangeMessage.ChangeType) { //insert, update and delete of rooms should trigger a configuration update for the associated room type case ChangeType.Insert: case ChangeType.Delete: case ChangeType.Update: { var roomTypeChangeMessage = new RoomTypeChangeMessage(roomChangeMessage.ProviderId, roomChangeMessage.ProductTypeId, ChangeType.Update, RoomTypeChangeMessage.RoomTypeChangeType.Configuration); return HandleRoomTypeUpdate(subscriberByOptinList, roomTypeChangeMessage); } } return true; }