From 7586f2cc3f0b6a2488f888178242f666e411b1c1 Mon Sep 17 00:00:00 2001 From: KerelOlivier Date: Tue, 24 May 2022 21:16:49 +0200 Subject: [PATCH] add: blog post controller and simple CRUD --- Controllers/BlogPostController.cs | 60 +++++++++++++++++++ Controllers/PostController.cs | 15 ----- Controllers/UserController.cs | 2 +- Models/BlogPost.cs | 3 +- Program.cs | 1 + .../{PostService.cs => BlogPostService.cs} | 4 +- 6 files changed, 66 insertions(+), 19 deletions(-) create mode 100644 Controllers/BlogPostController.cs delete mode 100644 Controllers/PostController.cs rename Services/{PostService.cs => BlogPostService.cs} (94%) diff --git a/Controllers/BlogPostController.cs b/Controllers/BlogPostController.cs new file mode 100644 index 0000000..dc2f0e2 --- /dev/null +++ b/Controllers/BlogPostController.cs @@ -0,0 +1,60 @@ +using backend.Models; +using backend.Services; +using Microsoft.AspNetCore.Mvc; + +namespace backend.Controllers; +[ApiController] +[Route("blog/api/[controller]")] +public class BlogPostController: ControllerBase +{ + private readonly BlogPostService _blogPostService; + + public BlogPostController(BlogPostService blogPostService) + { + _blogPostService = blogPostService; + } + + [HttpGet] + public async Task> Get() => + await _blogPostService.GetAllPostsAsync(); + + [HttpGet("{id:length(24)}")] + public async Task Get(string id) => + await _blogPostService.GetPostAsync(id); + + [HttpGet("newest/{n}")] + public async Task> GetLast(int n) => + await _blogPostService.GetLastNPostsAsync(n); + + [HttpPost] + public async Task Post([FromBody]BlogPost post) + { + await _blogPostService.CreatePostAsync(post); + return CreatedAtAction(nameof(Get), new {id = post.Id}, post); + } + + [HttpPut("{id:length(24)}")] + public async Task Put(string id, [FromBody]BlogPost post) + { + var postToUpdate = await _blogPostService.GetPostAsync(id); + if (postToUpdate == null) + { + return NotFound(); + } + await _blogPostService.UpdatePostAsync(id, post); + return NoContent(); + } + + [HttpDelete("{id:length(24)}")] + public async Task Delete(string id) + { + var postToDelete = await _blogPostService.GetPostAsync(id); + if (postToDelete == null) + { + return NotFound(); + } + await _blogPostService.DeletePostAsync(id); + return NoContent(); + } + +} \ No newline at end of file diff --git a/Controllers/PostController.cs b/Controllers/PostController.cs deleted file mode 100644 index 2879e1c..0000000 --- a/Controllers/PostController.cs +++ /dev/null @@ -1,15 +0,0 @@ -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; - } -} \ No newline at end of file diff --git a/Controllers/UserController.cs b/Controllers/UserController.cs index c9e207b..0eb9146 100644 --- a/Controllers/UserController.cs +++ b/Controllers/UserController.cs @@ -16,7 +16,7 @@ public class UserController : ControllerBase } //API endpoints [HttpGet] - public Task> Get() => _userService.Get(); + public async Task> Get() => await _userService.Get(); [HttpGet("{id:length(24)}")] public async Task> Get(string id) diff --git a/Models/BlogPost.cs b/Models/BlogPost.cs index 9741b99..021bd2d 100644 --- a/Models/BlogPost.cs +++ b/Models/BlogPost.cs @@ -16,7 +16,8 @@ public class BlogPost //Meta data [BsonRepresentation(BsonType.DateTime)] public DateTime? CreatedAt { get; set; } + [BsonRepresentation(BsonType.DateTime)] public DateTime? UpdatedAt { get; set; } - [BsonRepresentation(BsonType.Array)] public List Tags { get; set; } + public List Tags { get; set; } } \ No newline at end of file diff --git a/Program.cs b/Program.cs index db12bd5..6f3f1a9 100644 --- a/Program.cs +++ b/Program.cs @@ -8,6 +8,7 @@ var builder = WebApplication.CreateBuilder(args); builder.Services.Configure(builder.Configuration.GetSection("BlogDatabase")); builder.Services.AddSingleton(); +builder.Services.AddSingleton(); builder.Services.AddControllers(); diff --git a/Services/PostService.cs b/Services/BlogPostService.cs similarity index 94% rename from Services/PostService.cs rename to Services/BlogPostService.cs index f7d54ef..3c31171 100644 --- a/Services/PostService.cs +++ b/Services/BlogPostService.cs @@ -4,11 +4,11 @@ using MongoDB.Driver; namespace backend.Services; -public class PostService +public class BlogPostService { private readonly IMongoCollection _posts; - public PostService(IOptions settings) + public BlogPostService(IOptions settings) { var client = new MongoClient(settings.Value.ConnectionString); var database = client.GetDatabase(settings.Value.DatabaseName);