Skip to content

Instantly share code, notes, and snippets.

@casper-rasmussen
Created September 30, 2016 14:33
Show Gist options
  • Save casper-rasmussen/790b25d6c5d8d16eb25eef2fb5225216 to your computer and use it in GitHub Desktop.
Save casper-rasmussen/790b25d6c5d8d16eb25eef2fb5225216 to your computer and use it in GitHub Desktop.
/// <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