KerelOlivier
2 years ago
3 changed files with 74 additions and 1 deletions
@ -0,0 +1,15 @@ |
|||||||
|
using backend.Services; |
||||||
|
using Microsoft.AspNetCore.Mvc; |
||||||
|
|
||||||
|
namespace backend.Controllers; |
||||||
|
[ApiController] |
||||||
|
[Route("blog/api[controller]")]
|
||||||
|
public class PostController: ControllerBase |
||||||
|
{ |
||||||
|
private readonly PostService _postService; |
||||||
|
|
||||||
|
public PostController(PostService postService) |
||||||
|
{ |
||||||
|
_postService = postService; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,57 @@ |
|||||||
|
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); |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue