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); } } }