Browse Source

add: blog post service

posts
KerelOlivier 2 years ago
parent
commit
c98678b250
  1. 15
      Controllers/PostController.cs
  2. 3
      Models/BlogPost.cs
  3. 57
      Services/PostService.cs

15
Controllers/PostController.cs

@ -0,0 +1,15 @@ @@ -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;
}
}

3
Models/BlogPost.cs

@ -15,7 +15,8 @@ public class BlogPost @@ -15,7 +15,8 @@ public class BlogPost
//Meta data
[BsonRepresentation(BsonType.DateTime)]
public DateTime CreatedAt { get; set; }
public DateTime? CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
[BsonRepresentation(BsonType.Array)] public List<string> Tags { get; set; }
}

57
Services/PostService.cs

@ -0,0 +1,57 @@ @@ -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…
Cancel
Save