Add full profiles and latency tests
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user