예제 #1
0
        public async Task <IEnumerable <UserDocumentsDto> > GetUserInfo(long id, int page, [FromServices] IBlobProvider blobProvider,
                                                                        CancellationToken token)
        {
            var country = User.GetCountryClaim();
            var query   = new UserDocumentsQuery(id, page, country);


            var retVal = (await _queryBus.QueryAsync(query, token)).ToList();
            var tasks  = new Lazy <List <Task> >();

            foreach (var document in retVal)
            {
                var files = await _blobProvider.FilesInDirectoryAsync("preview-0", document.Id.ToString(), token);

                var file = files.FirstOrDefault();
                if (file != null)
                {
                    document.Preview =
                        blobProvider.GeneratePreviewLink(file,
                                                         TimeSpan.FromMinutes(20));

                    document.SiteLink = Url.RouteUrl("DocumentDownload", new { id = document.Id });
                }
                else
                {
                    var t = _queueProvider.InsertBlobReprocessAsync(document.Id);
                    tasks.Value.Add(t);
                }
            }

            return(retVal);
        }
예제 #2
0
        public async Task <WebResponseWithFacet <DocumentFeedDto> > GetDocumentsAsync(
            [FromQuery] ProfileDocumentsRequest request, CancellationToken token = default)
        {
            var query      = new UserDocumentsQuery(request.Id, request.Page, request.PageSize, request.DocumentType, request.Course);
            var retValTask = _queryBus.QueryAsync(query, token);

            var votesTask = Task.FromResult <Dictionary <long, VoteType> >(null);

            if (User.Identity.IsAuthenticated)
            {
                var userId    = _userManager.GetLongUserId(User);
                var queryTags = new UserVotesByCategoryQuery(userId);
                votesTask = _queryBus.QueryAsync(queryTags, token)
                            .ContinueWith(
                    t2 => { return(t2.Result.ToDictionary(x => x.Id, s => s.Vote)); }, token);
            }

            await Task.WhenAll(retValTask, votesTask);

            foreach (var item in retValTask.Result.Result)
            {
                if (item.User != null)
                {
                    item.User.Image = _urlBuilder.BuildUserImageEndpoint(item.User.Id, item.User.Image);
                }
            }
            return(new WebResponseWithFacet <DocumentFeedDto>()
            {
                Result = retValTask.Result.Result.Select(s =>
                {
                    s.Url = Url.DocumentUrl(s.Course, s.Id, s.Title);
                    s.Preview = _urlBuilder.BuildDocumentThumbnailEndpoint(s.Id);
                    if (votesTask.Result != null && votesTask.Result.TryGetValue(s.Id, out var p))
                    {
                        s.Vote.Vote = p;
                    }

                    return s;
                }),
                Count = retValTask.Result.Count
            });
예제 #3
0
 public async Task AdminUserDocumentsQuery_Ok(long userId, int page, string country)
 {
     var query = new UserDocumentsQuery(userId, page, country);
     await _fixture.QueryBus.QueryAsync(query, default);
 }
예제 #4
0
 public async Task UserDocumentsQueryHandler_Ok(long userId, int page, int pageSize, DocumentType?documentType, string course)
 {
     var query = new UserDocumentsQuery(userId, page, pageSize, documentType, course);
     var _     = await fixture.QueryBus.QueryAsync(query, default);
 }