public LinkOrphanGamesJobResult LinkOrphanGames()
{
var result = new LinkOrphanGamesJobResult();
var stopwatch = new Stopwatch();
stopwatch.Start();
try
{
var orphanGames = GetOrphanGames();
result.OrphanGames = orphanGames.Count;
foreach (var game in orphanGames)
{
var gameName = RemoveYear(game.Name);
var existingGame = GetExistingBGGGameByName(gameName);
if (existingGame != null)
{
UpdateGameDefinition(game, existingGame.Id, result);
}
else
{
var searchResult = _boardGameGeekApiClient.SearchBoardGames(gameName, true);
if (searchResult.Any())
{
var gameToAdd = GetGameToAddFromSearch(searchResult);
if (gameToAdd != null)
{
existingGame = GetExistingBGGGameById(gameToAdd);
if (existingGame != null)
{
UpdateGameDefinition(game, existingGame.Id, result);
}
else
{
var newRecord = CreateBGGGame(gameToAdd);
UpdateGameDefinition(game, newRecord.Id, result);
}
}
}
}
if (game.BoardGameGeekGameDefinitionId != null)
{
_dataContext.CommitAllChanges();
}
else
{
result.StillOrphanGames.Add(new LinkOrphanGamesJobResult.OrphanGame()
{
Name = game.Name,
Id = game.Id,
GamingGroupId = game.GamingGroupId
});
}
}
}
catch (Exception ex)
{
result.Success = false;
RollbarClient.SendException(ex);
}
stopwatch.Stop();
result.TimeEllapsed = stopwatch.Elapsed;
return result;
}