Created
September 30, 2016 14:33
-
-
Save casper-rasmussen/790b25d6c5d8d16eb25eef2fb5225216 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <summary> | |
/// Handler for hooking in to events to register BestBet Selector for rental properties | |
/// </summary> | |
public class DynamicPropertyBestBetHandler | |
{ | |
private static void DeleteFromIndex(Identity id) | |
{ | |
//Delete the BestBet from our index | |
SearchClient.Instance.Delete<ExternalUrlBestBet>(new TermFilter("Id$$string", FieldFilterValue.Create(id.ExternalId.ToString()))); | |
} | |
public static EventHandler<ItemEventArgs> ItemDeletedEventHandler() | |
{ | |
return (sender, args) => DeleteFromIndex(args.ItemId.ExternalId); | |
} | |
public static EventHandler<ItemEventArgs> ItemSavedEventHandler() | |
{ | |
return (sender, args) => { | |
if (args.Item.IsNull()) | |
return; | |
BestBet item = args.Item as BestBet; | |
if(item == null) | |
return; | |
DynamicPropertyBestBetSelector bestBetSelector = item.BestBetSelector as DynamicPropertyBestBetSelector; | |
if (bestBetSelector == null && item.BestBetSelector is ExternalUrlBestBetSelector) | |
{ | |
ExternalUrlBestBetSelector externalUrlBestBetSelector = item.BestBetSelector as ExternalUrlBestBetSelector; | |
//Only if its suited | |
bool suited = DynamicPropertyBestBetSelector.Suitable(externalUrlBestBetSelector.Url); | |
//If not, then make sure we don't manage and let it fall back to other handlers | |
if (!suited) | |
return; | |
//Convert | |
bestBetSelector = new DynamicPropertyBestBetSelector() { Id = externalUrlBestBetSelector.Id, Language = externalUrlBestBetSelector.Language, IndexId = externalUrlBestBetSelector.IndexId, Url = externalUrlBestBetSelector.Url }; | |
} | |
//If the selector already has been assigned, then skip | |
if (bestBetSelector == null || bestBetSelector.IndexId != null) | |
return; | |
//Store our best bet | |
Identity identity = StoreInDDS(bestBetSelector, item); | |
//Map it to Find | |
StoreInElasticSearch(identity); | |
}; | |
} | |
private static Identity StoreInDDS(DynamicPropertyBestBetSelector selector, BestBet bestBet) | |
{ | |
BestBetRepository bestBetRepository = new BestBetRepository(); | |
selector.IndexId = bestBet.Id.ExternalId.ToString(); | |
bestBet.BestBetSelector = selector; | |
return bestBetRepository.Save(bestBet); | |
} | |
private static void StoreInElasticSearch(Identity id) | |
{ | |
//Delete if it already exists | |
DeleteFromIndex(id); | |
IClient instance = SearchClient.Instance; | |
ExternalUrlBestBet externalUrlBestBet = new ExternalUrlBestBet() | |
{ | |
Id = id.ExternalId.ToString() | |
}; | |
instance.Index(externalUrlBestBet); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment