using System.Threading.Tasks; using System.Linq; using Dapper; using Website.Models; using Website.Data.States; using System.Collections.Generic; namespace Website.Data { public class BlogRepository { private readonly IDatabaseProvider _dbProvider; public BlogRepository(IDatabaseProvider dbProvider) => _dbProvider = dbProvider; public async Task GetPostByUrlAsync(string url) { const string query = "SELECT * FROM blog_posts WHERE post_url=@url AND post_deleted=0"; using (var connection = _dbProvider.NewConnection()) { connection.Open(); var result = await connection.QueryAsync(query, new{url}); return new BlogPost(result.First()); } } public async Task> GetLatestPostsAsync(int limit, int offset) { const string query = "SELECT * FROM blog_posts WHERE post_content<>'' AND post_deleted=0 ORDER BY post_timestamp DESC LIMIT @offset,@limit"; using (var connection = _dbProvider.NewConnection()) { connection.Open(); var results = await connection.QueryAsync(query, new{limit, offset}); return results.Select(result => new BlogPost(result)); } } public async Task GetLatestPostAsync() => (await GetLatestPostsAsync(1, 0)).First(); public async Task GetCountAsync() { var query="SELECT COUNT(*) FROM blog_posts WHERE post_content<>'' AND post_deleted=0"; using(var connection = _dbProvider.NewConnection()) { connection.Open(); var result = await connection.QueryAsync(query); return result.First(); } } } }