Browse Source

add: blog post controller and simple CRUD

posts
KerelOlivier 2 years ago
parent
commit
7586f2cc3f
  1. 60
      Controllers/BlogPostController.cs
  2. 15
      Controllers/PostController.cs
  3. 2
      Controllers/UserController.cs
  4. 3
      Models/BlogPost.cs
  5. 1
      Program.cs
  6. 4
      Services/BlogPostService.cs

60
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<List<BlogPost>> Get() =>
await _blogPostService.GetAllPostsAsync();
[HttpGet("{id:length(24)}")]
public async Task<BlogPost?> Get(string id) =>
await _blogPostService.GetPostAsync(id);
[HttpGet("newest/{n}")]
public async Task<List<BlogPost>> GetLast(int n) =>
await _blogPostService.GetLastNPostsAsync(n);
[HttpPost]
public async Task<IActionResult> Post([FromBody]BlogPost post)
{
await _blogPostService.CreatePostAsync(post);
return CreatedAtAction(nameof(Get), new {id = post.Id}, post);
}
[HttpPut("{id:length(24)}")]
public async Task<IActionResult> 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<IActionResult> Delete(string id)
{
var postToDelete = await _blogPostService.GetPostAsync(id);
if (postToDelete == null)
{
return NotFound();
}
await _blogPostService.DeletePostAsync(id);
return NoContent();
}
}

15
Controllers/PostController.cs

@ -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;
}
}

2
Controllers/UserController.cs

@ -16,7 +16,7 @@ public class UserController : ControllerBase
} }
//API endpoints //API endpoints
[HttpGet] [HttpGet]
public Task<List<User>> Get() => _userService.Get(); public async Task<List<User>> Get() => await _userService.Get();
[HttpGet("{id:length(24)}")] [HttpGet("{id:length(24)}")]
public async Task<ActionResult<User>> Get(string id) public async Task<ActionResult<User>> Get(string id)

3
Models/BlogPost.cs

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

1
Program.cs

@ -8,6 +8,7 @@ var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<BlogDatabaseSettings>(builder.Configuration.GetSection("BlogDatabase")); builder.Services.Configure<BlogDatabaseSettings>(builder.Configuration.GetSection("BlogDatabase"));
builder.Services.AddSingleton<UserService>(); builder.Services.AddSingleton<UserService>();
builder.Services.AddSingleton<BlogPostService>();
builder.Services.AddControllers(); builder.Services.AddControllers();

4
Services/PostService.cs → Services/BlogPostService.cs

@ -4,11 +4,11 @@ using MongoDB.Driver;
namespace backend.Services; namespace backend.Services;
public class PostService public class BlogPostService
{ {
private readonly IMongoCollection<BlogPost> _posts; private readonly IMongoCollection<BlogPost> _posts;
public PostService(IOptions<BlogDatabaseSettings> settings) public BlogPostService(IOptions<BlogDatabaseSettings> settings)
{ {
var client = new MongoClient(settings.Value.ConnectionString); var client = new MongoClient(settings.Value.ConnectionString);
var database = client.GetDatabase(settings.Value.DatabaseName); var database = client.GetDatabase(settings.Value.DatabaseName);
Loading…
Cancel
Save