// Todo refactor and reimplement logic of this function private void ApplyGeolocationToAllFriends(AppUser user) { _profileRepo.LoadUserProfileWithFriendsAndDevices(user); _friendRepo.LoadFriendsWithGeolocationAndDevices(user); var friends = user.Profile.Friends .Where(p => p.IsInRange && p.CanSendNotification); var friendsInMeetingRange = user.Profile.Friends .Where(p => p.CanAddAsMeeting); _logger.LogCritical($"{user.Profile.FirstName} {user.Profile.LastName} Friends count: {friends.Count()} Devices: {user.Profile.Devices.Count()}"); foreach (var friend in friends) { _logger.LogCritical($"{user.Profile.FirstName} {user.Profile.LastName} Notifying user"); friend.LastNotification = DateTime.Now; AddNotification(friend); _notificationService.NotifyUserUsingWebPush(friend); } if (friendsInMeetingRange.Count() > 0) { _logger.LogCritical($"Friends in meet range {friendsInMeetingRange.Count()} | {user.Profile.Geolocation.Longitude}"); var friendProfiles = _friendRepo.GetFriendProfilesBySpecifiedRequestedProfile(user.Profile, user.Profile.Friends); var meeting = new Meeting { Latitude = user.Profile.Geolocation.Latitude, Longitude = user.Profile.Geolocation.Longitude, MeetingTime = DateTime.Now, Profile = user.Profile, Friends = new List <MeetingProfile>(), }; meeting.AddMeetingFriends(friendProfiles); user.Profile.Meetings.Add(new MeetingProfile { Profile = user.Profile, Meeting = meeting, }); } if (_uow.Commit()) { _logger.LogCritical($"Commit? = {friends.Count()}"); } }