public async Task <ApiResponse <object> > Add([FromForm] ReadItem readItem)
    {
        var response = new ApiResponse <object>();

        try
        {
            readItem.IsCompleted = Request.Form["isCompleted"] == "on";
            readItem.IsPublished = Request.Form["isPublished"] == "on";
            var readRequest = new ReadGrpcRequest {
                ReadItem = readItem
            };
            var readResponse = await _readGrpcService.AddReadItemAsync(readRequest);

            if (readResponse.IsOk)
            {
                response.RedirectTo = "/read";
            }
            else
            {
                response.IsOk    = false;
                response.Message = readResponse.Message;
            }
        }
        catch (Exception ex)
        {
            response.IsOk    = false;
            response.Message = ex.Message;
            _logger.LogError(ex, $"Add new read failed. {JsonUtil.Serialize(readItem)}");
        }

        return(response);
    }
    public async Task <ApiResponse <object> > Delete([FromRoute] string id)
    {
        var response = new ApiResponse <object>();

        try
        {
            var readRequest = new ReadGrpcRequest {
                ReadItemId = id
            };
            var readResponse = await _readGrpcService.DeleteReadItemAsync(readRequest);

            if (!readResponse.IsOk)
            {
                response.IsOk    = false;
                response.Message = readResponse.Message;
            }
        }
        catch (Exception ex)
        {
            response.IsOk    = false;
            response.Message = ex.Message;
            _logger.LogError(ex, $"Delete read {id} failed.");
        }

        return(response);
    }
    public async Task <ReadGrpcResponse> GetReadItemsAsync(ReadGrpcRequest request, CallContext context = default)
    {
        var response = new ReadGrpcResponse();

        try
        {
            var readItemRuntime = new List <ReadItemRuntime>();
            var readItems       = await _readFileService.GetReadItemsAsync();

            foreach (var readItem in readItems)
            {
                readItemRuntime.Add(GetReadItemRuntime(readItem, request.ExtractRuntime));
            }

            response.ReadItems = readItemRuntime;
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, $"Get read items failed. {JsonUtil.Serialize(request)}");
            response.IsOk    = false;
            response.Message = ex.Message;
        }

        return(response);
    }
Esempio n. 4
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 <IActionResult> Update([FromRoute] string id)
    {
        var readRequest = new ReadGrpcRequest {
            ReadItemId = id
        };
        var readResponse = await _readGrpcService.GetReadItemAsync(readRequest);

        if (readResponse.IsOk)
        {
            return(View(readResponse.ReadItemRuntime.Raw));
        }

        return(NotFound(readResponse.Message));
    }
    public async Task <ReadGrpcResponse> UpdateReadItemAsync(ReadGrpcRequest request, CallContext context = default)
    {
        var response = new ReadGrpcResponse();

        try
        {
            await _readFileService.UpdateReadItemAsync(request.ReadItem);

            response.ReadItem = request.ReadItem;
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, $"Update read item failed. {JsonUtil.Serialize(request)}");
            response.IsOk    = false;
            response.Message = ex.Message;
        }

        return(response);
    }
    public async Task <IActionResult> Index()
    {
        try
        {
            var request       = new ReadGrpcRequest();
            var itemsResponse = await _readGrpcService.GetReadItemsAsync(request);

            if (itemsResponse.IsOk)
            {
                return(View(itemsResponse.ReadItems ?? new List <ReadItemRuntime>()));
            }

            return(NotFound(itemsResponse.Message));
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Index page error");
            return(NotFound(ex.Message));
        }
    }
    public async Task <ReadGrpcResponse> GetReadItemAsync(ReadGrpcRequest request, CallContext context = default)
    {
        var response = new ReadGrpcResponse();

        try
        {
            var readItems = await _readFileService.GetReadItemsAsync();

            var readItem = readItems.FirstOrDefault(x => StringUtil.EqualsIgnoreCase(request.ReadItemId, x.Id));
            response.ReadItemRuntime = GetReadItemRuntime(readItem, request.ExtractRuntime);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, $"Get read item failed. {JsonUtil.Serialize(request)}");
            response.IsOk    = false;
            response.Message = ex.Message;
        }

        return(response);
    }
    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);
    }