using backend.Models; using Microsoft.Extensions.Options; using MongoDB.Driver; namespace backend.Services; public class BlogPostService { private readonly IMongoCollection _posts; public BlogPostService(IOptions settings) { var client = new MongoClient(settings.Value.ConnectionString); var database = client.GetDatabase(settings.Value.DatabaseName); _posts = database.GetCollection(settings.Value.PostsCollectionName); } public async Task GetPostAsync(string id) { var post = await _posts.Find(p => p.Id == id).FirstOrDefaultAsync(); return post; } public async Task> GetLastNPostsAsync(int n) { var posts = await _posts.Find(p => true).SortByDescending(p => p.CreatedAt).Limit(n).ToListAsync(); return posts; } public async Task> 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); } }