Example #1
0
        public async Task Repost(List <VkRepostViewModel> vkRepostViewModels)
        {
            if (vkRepostViewModels == null)
            {
                throw new ArgumentNullException(nameof(vkRepostViewModels));
            }
            vkRepostViewModels = vkRepostViewModels.Distinct().ToList();

            var posts = await _wallService.GetById(vkRepostViewModels);

            var reposts = posts.Response.Items.Where(c => c.Reposts != null).ToArray();

            foreach (var group in posts.Response.Groups.Where(c => !c.IsMember))
            {
                try
                {
                    await _vkGroupService.JoinGroup(group.Id);
                }
                catch (Exception e)
                {
                    _logger.LogError(e, e.Message);
                }
            }

            foreach (var t in reposts)
            {
                try
                {
                    await _wallService.Repost(new VkRepostViewModel(t.OwnerId, t.Id));

                    await _messageBroker.SendAsync(new RepostCreated
                    {
                        Id      = t.Id,
                        OwnerId = t.OwnerId,
                        UserId  = _authenticatedUserProvider.GetUser().Id
                    });
                }
                catch (Exception e)
                {
                    _logger.LogError(e, e.Message);
                }
            }

            foreach (var x in vkRepostViewModels.Select(f => $"{f.Id}+{f.OwnerId}")
                     .Except(reposts.Select(f => $"{f.Id}+{f.OwnerId}")))
            {
                await _messageBroker.SendAsync(new RepostCreated
                {
                    Id      = Convert.ToInt32(x.Split('+')[0]),
                    OwnerId = Convert.ToInt32(x.Split('+')[1]),
                    UserId  = _authenticatedUserProvider.GetUser().Id
                });
            }
        }
        public async ValueTask <string> GetTokenAsync()
        {
            var user = _authenticatedUserProvider.GetUser();

            if (user == null)
            {
                return(string.Empty);
            }

            var token = await _cachingService.GetAsync <string>(_userTokenKeyProvider.GetKey(user.Id));

            if (string.IsNullOrEmpty(token))
            {
                token = (await _identityClient.GetTokenAsync(new IdentityTokenServiceRequest {
                    UserId = user.Id
                })
                         .ResponseAsync)?.Token;

                if (!string.IsNullOrEmpty(token))
                {
                    await _cachingService.SetAsync(_userTokenKeyProvider.GetKey(user.Id), token);
                }
            }

            return(token);
        }
        public async Task <DataSourceResponseModel> ExecuteAsync(UserMessageQuery messageQuery,
                                                                 CancellationToken token = default)
        {
            var(page, pageSize)   = messageQuery;
            await using var scope = await _transactionScopeFactory.CreateAsync(token);

            var query = scope.Query <VkRepost>()
                        .Where(f => f.UserId == _authenticatedUserProvider.GetUser().Id).OrderByDescending(f => f.Id);

            var data = await query.Skip(page *pageSize).Take(pageSize).ToListAsync(token);

            var posts = await _vkClient.GetById(
                data.Select(f => new VkRepostViewModel(f.OwnerId, f.MessageId)));

            var texts = posts
                        .Response.Items
                        .Select(f => new
            {
                f.Text, f.Id,
                DateStatus = data.Where(a => a.OwnerId == f.OwnerId && a.MessageId == f.Id)
                             .Select(a => a.DateStatus)
            });

            return(new DataSourceResponseModel(texts, await query.CountAsync(token)));
        }
Example #4
0
        public VkRequestState(IAuthenticatedUserProvider authenticatedUserProvider, string url)
        {
            UserId = authenticatedUserProvider.GetUser().Id;

            ParseQuery(url);
        }