The backend api for the blog
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

57 lines
1.6 KiB

using backend.Models;
using Microsoft.Extensions.Options;
using MongoDB.Driver;
namespace backend.Services;
public class BlogPostService
{
private readonly IMongoCollection<BlogPost> _posts;
public BlogPostService(IOptions<BlogDatabaseSettings> settings)
{
var client = new MongoClient(settings.Value.ConnectionString);
var database = client.GetDatabase(settings.Value.DatabaseName);
_posts = database.GetCollection<BlogPost>(settings.Value.PostsCollectionName);
}
public async Task<BlogPost?> GetPostAsync(string id)
{
var post = await _posts.Find(p => p.Id == id).FirstOrDefaultAsync();
return post;
}
public async Task<List<BlogPost>> GetLastNPostsAsync(int n)
{
var posts = await _posts.Find(p => true).SortByDescending(p => p.CreatedAt).Limit(n).ToListAsync();
return posts;
}
public async Task<List<BlogPost>> GetAllPostsAsync()
{
var posts = await _posts.Find(p => true).ToListAsync();
return posts;
}
public async Task CreatePostAsync(BlogPost post)
{
post.CreatedAt = DateTime.UtcNow;
await _posts.InsertOneAsync(post);
}
public async Task UpdatePostAsync(string id, BlogPost postIn)
{
var oldPost = await _posts.Find(p => p.Id == id).FirstOrDefaultAsync();
//Set timestamps
postIn.CreatedAt = oldPost.CreatedAt;
postIn.UpdatedAt = DateTime.UtcNow;
await _posts.ReplaceOneAsync(p => p.Id == id, postIn);
}
public async Task DeletePostAsync(string id)
{
await _posts.DeleteOneAsync(p => p.Id == id);
}
}