Esempio n. 1
0
    public async Task ReloadAsync()
    {
        _reloadLock.Reset();
        try
        {
            var blogRequest = new BlogGrpcRequest {
                ExtractRuntime = true
            };
            var postsResponse = await _blogGrpcService.GetPostsAsync(blogRequest);

            if (!postsResponse.IsOk)
            {
                _logger.LogError($"Getting all posts failed: {postsResponse.Message}");
                return;
            }

            var tagsResponse = await _blogGrpcService.GetTagsAsync();

            if (!tagsResponse.IsOk)
            {
                _logger.LogError($"Getting all tags failed: {tagsResponse.Message}");
                return;
            }

            var readRequest = new ReadGrpcRequest {
                ExtractRuntime = true
            };
            var readResponse = await _readGrpcService.GetReadItemsAsync(readRequest);

            if (!readResponse.IsOk)
            {
                _logger.LogError($"Getting all read items failed: {tagsResponse.Message}");
                return;
            }

            var posts     = postsResponse.Posts ?? new List <BlogPostRuntime>();
            var tags      = tagsResponse.Tags ?? new List <BlogTag>();
            var readItems = readResponse.ReadItems ?? new List <ReadItemRuntime>();

            _allPosts.Clear();
            _allPosts.AddRange(posts.OrderByDescending(x => x.Raw.PublishTime));

            _allTags.Clear();
            _allTags.AddRange(tags.OrderByDescending(x => x.LastUpdatedAt));

            _allReadItems.Clear();
            _allReadItems.AddRange(readItems.OrderByDescending(x => x.Raw.StartTime));
            _lastReloadTime = DateTime.Now;
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Reload blog data failed.");
        }
        finally
        {
            _reloadLock.Set();
        }
    }
    public async Task <ApiResponse <ChartResponse> > GetReadStats()
    {
        var response = new ApiResponse <ChartResponse>();

        try
        {
            var request       = new ReadGrpcRequest();
            var itemsResponse = await _readGrpcService.GetReadItemsAsync(request);

            if (itemsResponse.IsOk)
            {
                itemsResponse.ReadItems ??= new List <ReadItemRuntime>();
                var chartResponse = new ChartResponse {
                    Title = "当年阅读数", Type = "bar"
                };
                foreach (var item in itemsResponse.ReadItems.GroupBy(x => x.Raw.StartTime.Year).OrderBy(x => x.Key))
                {
                    chartResponse.Data.Add(item.Count());
                    chartResponse.Labels.Add(item.Key.ToString());
                }

                response.Content = chartResponse;
            }
            else
            {
                response.IsOk    = false;
                response.Message = itemsResponse.Message;
            }
        }
        catch (Exception ex)
        {
            response.IsOk    = false;
            response.Message = ex.Message;
            _logger.LogError(ex, "Get read stats failed.");
        }

        return(response);
    }