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); }
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); }