diff --git a/Controllers/UserController.cs b/Controllers/UserController.cs index 99db3ae..26a8cd8 100644 --- a/Controllers/UserController.cs +++ b/Controllers/UserController.cs @@ -1,6 +1,60 @@ +using backend.Models; +using backend.Services; +using Microsoft.AspNetCore.Mvc; + namespace backend.Controllers; -public class UserController +[ApiController] +[Route("blog/api/[controller]")] +public class UserController : ControllerBase { + private readonly UserService _userService; + + public UserController(UserService userService) + { + _userService = userService; + } + //API endpoints + [HttpGet("{id:length(24)}")] + public async Task> Get(string id) + { + var user = await _userService.GetAsync(id); + if (user == null) + { + return NotFound(); + } + return user; + } + [HttpPost] + public async Task Post([FromBody] User user) + { + await _userService.CreateAsync(user); + return CreatedAtAction(nameof(Get), new {id = user.Id}, user); + } + + [HttpPut("{id:length(24)}")] + public async Task Put(string id, [FromBody] User user) + { + var userToUpdate = await _userService.GetAsync(id); + if (userToUpdate == null) + { + return NotFound(); + } + await _userService.UpdateAsync(id, user); + return NoContent(); + } + + [HttpDelete("{id:length(24)}")] + public async Task Delete(string id) + { + var user = await _userService.GetAsync(id); + if (user == null) + { + return NotFound(); + } + await _userService.RemoveAsync(user.Id); + return NoContent(); + } + } \ No newline at end of file diff --git a/Models/BlogPost.cs b/Models/BlogPost.cs index 9a435eb..6191fa6 100644 --- a/Models/BlogPost.cs +++ b/Models/BlogPost.cs @@ -7,11 +7,11 @@ public class BlogPost { [BsonId] [BsonRepresentation(BsonType.ObjectId)] - public string? Id { get; set; } + public string? Id { get; set; } = null; - public string AuthorId { get; set; } - public string Title { get; set; } - public string Content { get; set; } + public string AuthorId { get; set; } = null; + public string Title { get; set; } = null; + public string Content { get; set; } = null; //Meta data [BsonRepresentation(BsonType.DateTime)] diff --git a/Models/User.cs b/Models/User.cs index 6e9a47b..1dafce6 100644 --- a/Models/User.cs +++ b/Models/User.cs @@ -7,9 +7,7 @@ public class User { [BsonId] [BsonRepresentation(BsonType.ObjectId)] - public string Id { get; set; } + public string? Id { get; set; } public string Name { get; set; } - public string Email { get; set; } - public string Password { get; set; } //Bcrypt encrypted - public int Role { get; set; } //0 = user, 1 = author, 2 = admin + public string Bio { get; set; } } \ No newline at end of file diff --git a/Program.cs b/Program.cs index 434bae8..67efaec 100644 --- a/Program.cs +++ b/Program.cs @@ -1,11 +1,16 @@ using backend.Models; +using backend.Services; var builder = WebApplication.CreateBuilder(args); // Add services to the container. -builder.Services.AddControllers(); builder.Services.Configure(builder.Configuration.GetSection("BlogDatabase")); + +builder.Services.AddSingleton(); +builder.Services.AddControllers(); + + // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); diff --git a/appsettings.json b/appsettings.json index 95da7f2..dc833af 100644 --- a/appsettings.json +++ b/appsettings.json @@ -2,8 +2,8 @@ "BlogDatabase": { "ConnectionString": "mongodb://localhost:27017", "DatabaseName": "Blog", - "UserCollectionName": "Users", - "PostCollectionName": "Posts" + "UsersCollectionName": "Users", + "PostsCollectionName": "Posts" },