Implemented admin crud ui for users page. Fixed some smaller issues

This commit is contained in:
Masu Baumgartner
2024-10-06 20:44:18 +02:00
parent cf25e4e1e6
commit f48e5d4b19
7 changed files with 93 additions and 12 deletions

View File

@@ -5,6 +5,7 @@ using MoonCore.Extended.Helpers;
using MoonCore.Models;
using Moonlight.ApiServer.Database.Entities;
using Moonlight.Shared.Http.Requests.Admin.Users;
using Moonlight.Shared.Http.Responses.Admin.Users;
namespace Moonlight.ApiServer.Http.Controllers.Admin.Users;
@@ -12,25 +13,25 @@ namespace Moonlight.ApiServer.Http.Controllers.Admin.Users;
[Route("api/admin/users")]
public class UsersController : Controller
{
private readonly CrudHelper<User> CrudHelper;
private readonly CrudHelper<User, UserDetailResponse> CrudHelper;
private readonly DatabaseRepository<User> UserRepository;
public UsersController(CrudHelper<User> crudHelper, DatabaseRepository<User> userRepository)
public UsersController(CrudHelper<User, UserDetailResponse> crudHelper, DatabaseRepository<User> userRepository)
{
CrudHelper = crudHelper;
UserRepository = userRepository;
}
[HttpGet]
public async Task<IPagedData<User>> Get([FromQuery] int page, [FromQuery] int pageSize = 50)
public async Task<IPagedData<UserDetailResponse>> Get([FromQuery] int page, [FromQuery] int pageSize = 50)
=> await CrudHelper.Get(page, pageSize);
[HttpGet("{id}")]
public async Task<User> GetSingle(int id)
public async Task<UserDetailResponse> GetSingle(int id)
=> await CrudHelper.GetSingle(id);
[HttpPost]
public async Task<User> Create([FromBody] CreateUserRequest request)
public async Task<UserDetailResponse> Create([FromBody] CreateUserRequest request)
{
// Reformat values
request.Username = request.Username.ToLower().Trim();
@@ -49,9 +50,9 @@ public class UsersController : Controller
}
[HttpPatch("{id}")]
public async Task<User> Update([FromRoute] int id, [FromBody] UpdateUserRequest request)
public async Task<UserDetailResponse> Update([FromRoute] int id, [FromBody] UpdateUserRequest request)
{
var user = await CrudHelper.GetSingle(id);
var user = await CrudHelper.GetSingleModel(id);
// Reformat values
request.Username = request.Username.ToLower().Trim();
@@ -63,7 +64,14 @@ public class UsersController : Controller
if (UserRepository.Get().Any(x => x.Email == request.Email && x.Id != user.Id))
throw new HttpApiException("A user with that email address already exists", 400);
// Perform hashing the password if required
if (!string.IsNullOrEmpty(request.Password))
{
request.Password = HashHelper.Hash(request.Password);
user.TokenValidTimestamp = DateTime.UtcNow; // This change will get applied by the crud helper
}
return await CrudHelper.Update(user, request);
}

View File

@@ -13,7 +13,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="MoonCore" Version="1.5.8" />
<PackageReference Include="MoonCore.Extended" Version="1.0.4" />
<PackageReference Include="MoonCore.Extended" Version="1.0.6" />
<PackageReference Include="MoonCore.PluginFramework" Version="1.0.0" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.2" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0"/>

View File

@@ -86,7 +86,7 @@ var databaseHelper = new DatabaseHelper(
builder.Services.AddSingleton(databaseHelper);
builder.Services.AddScoped(typeof(DatabaseRepository<>));
builder.Services.AddScoped(typeof(CrudHelper<>));
builder.Services.AddScoped(typeof(CrudHelper<,>));
builder.Services.AddDbContext<CoreDataContext>();
databaseHelper.AddDbContext<CoreDataContext>();