Add full profiles and latency tests

This commit is contained in:
cesnimda
2026-03-22 12:06:25 +01:00
parent 91f6361055
commit 0fa481cab6
11 changed files with 704 additions and 103 deletions
+43 -5
View File
@@ -25,7 +25,17 @@ public sealed class UsersController : ControllerBase
_cfg = cfg;
}
public sealed record UserDto(string Id, string? Email, string? UserName, bool EmailConfirmed, List<string> Roles);
public sealed record UserDto(
string Id,
string? Email,
string? UserName,
string? FirstName,
string? LastName,
string? DisplayName,
bool EmailConfirmed,
string? GoogleEmail,
DateTimeOffset? GoogleLinkedAt,
List<string> Roles);
[HttpGet]
public async Task<ActionResult<List<UserDto>>> List(CancellationToken cancellationToken)
@@ -38,13 +48,13 @@ public sealed class UsersController : ControllerBase
foreach (var u in items)
{
var rs = await _users.GetRolesAsync(u);
outList.Add(new UserDto(u.Id, u.Email, u.UserName, u.EmailConfirmed, rs.ToList()));
outList.Add(ToDto(u, rs.ToList()));
}
return Ok(outList);
}
public sealed record CreateUserRequest(string Email, string Password, string[]? Roles);
public sealed record CreateUserRequest(string Email, string Password, string? UserName, string? FirstName, string? LastName, string? DisplayName, string[]? Roles);
[HttpPost]
public async Task<ActionResult<UserDto>> Create([FromBody] CreateUserRequest request, CancellationToken cancellationToken)
@@ -58,7 +68,15 @@ public sealed class UsersController : ControllerBase
var existing = await _users.FindByEmailAsync(email);
if (existing is not null) return BadRequest("User already exists.");
var u = new ApplicationUser { UserName = email, Email = email, EmailConfirmed = true };
var u = new ApplicationUser
{
UserName = string.IsNullOrWhiteSpace(request.UserName) ? email : request.UserName.Trim(),
Email = email,
EmailConfirmed = true,
FirstName = TrimOrNull(request.FirstName),
LastName = TrimOrNull(request.LastName),
DisplayName = TrimOrNull(request.DisplayName)
};
var res = await _users.CreateAsync(u, password);
if (!res.Succeeded)
return BadRequest(string.Join("; ", res.Errors.Select(e => e.Description)));
@@ -72,7 +90,7 @@ public sealed class UsersController : ControllerBase
}
var rs = await _users.GetRolesAsync(u);
return Ok(new UserDto(u.Id, u.Email, u.UserName, u.EmailConfirmed, rs.ToList()));
return Ok(ToDto(u, rs.ToList()));
}
public sealed record SetRolesRequest(string[] Roles);
@@ -167,4 +185,24 @@ public sealed class UsersController : ControllerBase
return NoContent();
}
private static UserDto ToDto(ApplicationUser user, List<string> roles)
{
return new UserDto(
user.Id,
user.Email,
user.UserName,
user.FirstName,
user.LastName,
user.DisplayName,
user.EmailConfirmed,
user.GoogleEmail,
user.GoogleLinkedAt,
roles);
}
private static string? TrimOrNull(string? value)
{
return string.IsNullOrWhiteSpace(value) ? null : value.Trim();
}
}