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
57 lines
1.6 KiB
using backend.Models; |
|
using Microsoft.Extensions.Options; |
|
using MongoDB.Driver; |
|
|
|
namespace backend.Services; |
|
|
|
public class PostService |
|
{ |
|
private readonly IMongoCollection<BlogPost> _posts; |
|
|
|
public PostService(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); |
|
} |
|
|
|
} |