Compare commits

..

3 Commits

  1. 60
      Controllers/UserController.cs
  2. 9
      Models/BlogDatabaseSettings.cs
  3. 8
      Models/BlogPost.cs
  4. 6
      Models/User.cs
  5. 8
      Program.cs
  6. 38
      Services/UserService.cs
  7. 8
      appsettings.json

60
Controllers/UserController.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 UserController : ControllerBase
{
private readonly UserService _userService;
public UserController(UserService userService)
{
_userService = userService;
}
//API endpoints
[HttpGet("{id:length(24)}")]
public async Task<ActionResult<User>> Get(string id)
{
var user = await _userService.GetAsync(id);
if (user == null)
{
return NotFound();
}
return user;
}
[HttpPost]
public async Task<IActionResult> Post([FromBody] User user)
{
await _userService.CreateAsync(user);
return CreatedAtAction(nameof(Get), new {id = user.Id}, user);
}
[HttpPut("{id:length(24)}")]
public async Task<IActionResult> 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<IActionResult> Delete(string id)
{
var user = await _userService.GetAsync(id);
if (user == null)
{
return NotFound();
}
await _userService.RemoveAsync(user.Id);
return NoContent();
}
}

9
Models/BlogDatabaseSettings.cs

@ -0,0 +1,9 @@
namespace backend.Models;
public class BlogDatabaseSettings
{
public string ConnectionString { get; set; } = null;
public string DatabaseName { get; set; } = null;
public string UsersCollectionName{ get; set; } = null;
public string PostsCollectionName { get; set; } = null;
}

8
Models/BlogPost.cs

@ -7,11 +7,11 @@ public class BlogPost
{ {
[BsonId] [BsonId]
[BsonRepresentation(BsonType.ObjectId)] [BsonRepresentation(BsonType.ObjectId)]
public string? Id { get; set; } public string? Id { get; set; } = null;
public string AuthorId { get; set; } public string AuthorId { get; set; } = null;
public string Title { get; set; } public string Title { get; set; } = null;
public string Content { get; set; } public string Content { get; set; } = null;
//Meta data //Meta data
[BsonRepresentation(BsonType.DateTime)] [BsonRepresentation(BsonType.DateTime)]

6
Models/User.cs

@ -7,9 +7,7 @@ public class User
{ {
[BsonId] [BsonId]
[BsonRepresentation(BsonType.ObjectId)] [BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; } public string? Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string Email { get; set; } public string Bio { get; set; }
public string Password { get; set; } //Bcrypt encrypted
public int Role { get; set; } //0 = user, 1 = author, 2 = admin
} }

8
Program.cs

@ -1,8 +1,16 @@
using backend.Models;
using backend.Services;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
// Add services to the container. // Add services to the container.
builder.Services.Configure<BlogDatabaseSettings>(builder.Configuration.GetSection("BlogDatabase"));
builder.Services.AddSingleton<UserService>();
builder.Services.AddControllers(); builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer(); builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(); builder.Services.AddSwaggerGen();

38
Services/UserService.cs

@ -0,0 +1,38 @@
using backend.Models;
using Microsoft.Extensions.Options;
using MongoDB.Driver;
namespace backend.Services;
public class UserService
{
private readonly IMongoCollection<User> _users;
public UserService(IOptions<BlogDatabaseSettings> settings)
{
var client = new MongoClient(settings.Value.ConnectionString);
var database = client.GetDatabase(settings.Value.DatabaseName);
_users = database.GetCollection<User>(settings.Value.UsersCollectionName);
}
public async Task<User?> GetAsync(string id)
{
var user = await _users.Find(user => user.Id == id).FirstOrDefaultAsync();
return user;
}
public async Task CreateAsync(User user)
{
await _users.InsertOneAsync(user);
}
public async Task RemoveAsync(string id)
{
await _users.DeleteOneAsync(user => user.Id == id);
}
public async Task UpdateAsync(string id, User userIn)
{
await _users.ReplaceOneAsync(user => user.Id == id, userIn);
}
}

8
appsettings.json

@ -1,4 +1,12 @@
{ {
"BlogDatabase": {
"ConnectionString": "mongodb://localhost:27017",
"DatabaseName": "Blog",
"UsersCollectionName": "Users",
"PostsCollectionName": "Posts"
},
"Logging": { "Logging": {
"LogLevel": { "LogLevel": {
"Default": "Information", "Default": "Information",

Loading…
Cancel
Save