public static string GetGoogleId(string authToken, AuthTokenRepository authTokenRepository, UserRepository userRepository)
        {
            if (string.IsNullOrEmpty(authToken))
            {
                throw new ArgumentNullException("authToken");
            }

            User user;
            var googleId = authTokenRepository.GetGoogleIdByAuthToken(authToken);
            if (googleId == null)
            {
                user = RecordTheAuthTokenInTheDatabase(authToken, authTokenRepository);
                googleId = user.GoogleId;
            }
            else
            {
                user = userRepository.GetUserByGoogleId(googleId);
                if (user == null)
                {
                    var googlePlusLoginDto = GetGooglePlusLoginDto(authToken);
                    if (googlePlusLoginDto == null || String.IsNullOrEmpty(googlePlusLoginDto.id))
                    {
                        throw new ArgumentException(String.Format("Unable to retrieve a Google user for auth token: '{0}'.", authToken));
                    }

                    user = Mapper.Map<GooglePlusLoginDto, User>(googlePlusLoginDto);
                }
            }
            AddOrUpdateTheUser(user, userRepository);
            return googleId;
        }
 private static void AddOrUpdateTheUser(User user, UserRepository userRepository)
 {
     var existingUser = userRepository.GetUserByGoogleId(user.GoogleId);
     if (existingUser == null)
     {
         user.CreateDate = DateTimeOffset.Now;
         userRepository.Add(user);
     }
     else
     {
         if (existingUser.DisplayName != user.DisplayName ||
             existingUser.GivenName != user.GivenName ||
             existingUser.FamilyName != user.FamilyName ||
             existingUser.Link != user.Link ||
             existingUser.Picture != user.Picture ||
             existingUser.Gender != user.Gender ||
             existingUser.Locale != user.Locale)
         {
             existingUser.DisplayName = user.DisplayName;
             existingUser.GivenName = user.GivenName;
             existingUser.FamilyName = user.FamilyName;
             existingUser.Link = user.Link;
             existingUser.Picture = user.Picture;
             existingUser.Gender = user.Gender;
             existingUser.Locale = user.Locale;
             existingUser.UpdateDate = DateTimeOffset.Now;
             userRepository.Update(existingUser);
         }
     }
 }