Example #1
0
        // 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()}");
            }
        }