// TODO: add caching for get all posts protected async Task <IEnumerable <Post> > GetAllAsync(CancellationToken cancellationToken) { IDictionary <string, byte[]> files; var posts = new List <Post>(); try { files = await GitDbContext.GetFilesAsync(PathHelper.Build(Options.Value.RootPath, GitDbConstants.PostsFolder), cancellationToken); } catch { return(posts); } var postFiles = files.Values.Select(b => Encoding.UTF8.GetString(b)); foreach (var postFile in postFiles) { var json = postFile.Substring(0, postFile.IndexOf(GitDbConstants.MetaDataSeparator)); var gitDbPost = JsonSerializer.Deserialize <GitDbPost>(json, new JsonSerializerOptions { AllowTrailingCommas = true }); var post = new Post { Title = gitDbPost.Title, Description = gitDbPost.Description, Categories = gitDbPost.Categories, Published = gitDbPost.Published, Slug = gitDbPost.Slug, CoverUrl = gitDbPost.CoverUrl, CoverCaption = gitDbPost.CoverCaption, CoverLink = gitDbPost.CoverLink, }; var content = postFile.Substring(postFile.IndexOf(GitDbConstants.MetaDataSeparator) + GitDbConstants.MetaDataSeparator.Length); post.Content = content.Trim(); // TODO: add caching for authors var author = await _authorRepository.SingleOrDefaultAsync(a => a.UserName == gitDbPost.AuthorId, cancellationToken); post.Author = author; posts.Add(post); } return(posts); }
public async Task <BlogSettings> SingleOrDefaultAsync(CancellationToken cancellationToken) { IDictionary <string, byte[]> files; try { files = await GitDbContext.GetFilesAsync(new string[] { PathHelper.Build(Options.Value.RootPath, GitDbConstants.BlogSettingsFile) }, cancellationToken); } catch { return(null); } var json = Encoding.UTF8.GetString(files.Values.Single()); var blogSettings = JsonSerializer.Deserialize <BlogSettings>(json, new JsonSerializerOptions { AllowTrailingCommas = true }); return(blogSettings); }
public async Task <Author> SingleOrDefaultAsync(Expression <Func <Author, bool> > predicate, CancellationToken cancellationToken) { IDictionary <string, byte[]> files; try { files = await GitDbContext.GetFilesAsync(new string[] { PathHelper.Build(Options.Value.RootPath, GitDbConstants.AuthorsFile) }, cancellationToken); } catch { return(null); } var json = Encoding.UTF8.GetString(files.Values.Single()); var authors = JsonSerializer.Deserialize <IEnumerable <Author> >(json, new JsonSerializerOptions { AllowTrailingCommas = true }); return(authors.SingleOrDefault(predicate.Compile())); }