Ejemplo n.º 1
0
        private async Task UploadFriends(RegionPart regionPart)
        {
            var currentUser = await _dbContext.Users.Include(u => u.Friends).FirstOrDefaultAsync(u => !u.IsFriendsUploaded);

            if (currentUser != null)
            {
                try
                {
                    var offset  = 0;
                    var getNext = true;
                    var cities  = TambovCities.ResourceManager.GetString("tambov").Split(',');
                    while (getNext)
                    {
                        var friends = await _vkService.GetUserFriends(currentUser.SourceId, offset);

                        if (friends.Count > 0)
                        {
                            var filteredFriends = friends.Where(u => u.City != null).Where(u => cities.Contains(u.City.Title) || u.City?.Region != null &&
                                                                                           u.City.Region == regionPart.VkRegion.Title).Select(u =>
                                                                                                                                              new User
                            {
                                FirstName         = u.FirstName,
                                LastName          = u.LastName,
                                RegionPart        = regionPart,
                                SourceId          = u.Id,
                                IsFriendsUploaded = false,
                                IsLiked           = false
                            }).ToArray();
                            if (filteredFriends.Length > 0)
                            {
                                await _dbContext.AddRangeAsync(filteredFriends);

                                foreach (var friend in filteredFriends)
                                {
                                    currentUser.Friends.Add(friend);
                                }
                                _dbContext.Users.Update(currentUser);
                                await _dbContext.SaveChangesAsync();
                            }
                        }
                        else
                        {
                            getNext = false;
                        }

                        offset += 100;
                    }

                    currentUser.IsFriendsUploaded = true;
                    _dbContext.Update(currentUser);
                    await _dbContext.SaveChangesAsync();
                }
                catch (Exception e)
                {
                    _logger.Error(e, $"Exception : {e} \n Inner : {e.InnerException}");
                }
            }
        }