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
2 years ago
|
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);
|
||
|
}
|
||
|
|
||
|
}
|