diff --git a/ChessCubing.App/Models/Users/AdminUpdateUserRequest.cs b/ChessCubing.App/Models/Users/AdminUpdateUserRequest.cs index ab38e62..fdd1a60 100644 --- a/ChessCubing.App/Models/Users/AdminUpdateUserRequest.cs +++ b/ChessCubing.App/Models/Users/AdminUpdateUserRequest.cs @@ -2,8 +2,6 @@ namespace ChessCubing.App.Models.Users; public sealed class AdminUpdateUserRequest { - public string Username { get; set; } = string.Empty; - public string? Email { get; set; } public string? FirstName { get; set; } diff --git a/ChessCubing.App/Pages/AdminPage.razor b/ChessCubing.App/Pages/AdminPage.razor index 2bb1cfe..27bea0f 100644 --- a/ChessCubing.App/Pages/AdminPage.razor +++ b/ChessCubing.App/Pages/AdminPage.razor @@ -308,7 +308,11 @@
@@ -789,7 +793,6 @@ { var payload = new AdminUpdateUserRequest { - Username = EditFormModel.Username ?? string.Empty, Email = EditFormModel.Email, FirstName = EditFormModel.FirstName, LastName = EditFormModel.LastName, diff --git a/ChessCubing.Server/Admin/AdminUserContracts.cs b/ChessCubing.Server/Admin/AdminUserContracts.cs index 5d122b1..bafc67d 100644 --- a/ChessCubing.Server/Admin/AdminUserContracts.cs +++ b/ChessCubing.Server/Admin/AdminUserContracts.cs @@ -70,8 +70,6 @@ public sealed class AdminUserDetailResponse public sealed class AdminUpdateUserRequest { - public string Username { get; init; } = string.Empty; - public string? Email { get; init; } public string? FirstName { get; init; } diff --git a/ChessCubing.Server/Program.cs b/ChessCubing.Server/Program.cs index 69e3fda..43e9469 100644 --- a/ChessCubing.Server/Program.cs +++ b/ChessCubing.Server/Program.cs @@ -251,8 +251,9 @@ adminGroup.MapPut("/users/{subject}", async Task ( { try { + var existingIdentity = await keycloak.GetAdminUserAsync(subject, cancellationToken); var normalized = NormalizeAdminUpdate(request); - var fallbackDisplayName = BuildIdentityDisplayNameFromParts(normalized.FirstName, normalized.LastName, normalized.Username); + var fallbackDisplayName = BuildIdentityDisplayNameFromParts(normalized.FirstName, normalized.LastName, existingIdentity.Username); var siteProfileRequest = new UpdateUserProfileRequest { DisplayName = request.DisplayName, @@ -268,7 +269,7 @@ adminGroup.MapPut("/users/{subject}", async Task ( var updatedIdentity = await keycloak.UpdateAdminUserAsync( subject, new AdminIdentityUserUpdateRequest( - normalized.Username, + existingIdentity.Username, normalized.Email, normalized.FirstName, normalized.LastName, @@ -421,13 +422,11 @@ static AdminUserDetailResponse MapAdminDetail(AdminIdentityUser identity, UserPr static NormalizedAdminUserUpdate NormalizeAdminUpdate(AdminUpdateUserRequest request) { - var username = NormalizeRequiredValue(request.Username, "nom d'utilisateur", 120); var email = NormalizeEmail(request.Email); var firstName = NormalizeOptionalValue(request.FirstName, "prenom", 120); var lastName = NormalizeOptionalValue(request.LastName, "nom", 120); return new NormalizedAdminUserUpdate( - username, email, firstName, lastName, @@ -575,7 +574,6 @@ static async Task SignInAsync(HttpContext httpContext, KeycloakUserInfo userInfo } sealed record NormalizedAdminUserUpdate( - string Username, string? Email, string? FirstName, string? LastName, diff --git a/styles.css b/styles.css index deb230e..cfdab86 100644 --- a/styles.css +++ b/styles.css @@ -1868,6 +1868,14 @@ body.site-menu-hidden .site-menu-shell { min-height: 3.3rem; } +.admin-edit-modal-card input[readonly], +.admin-readonly-field { + color: rgba(255, 255, 255, 0.86); + background: rgba(255, 255, 255, 0.025); + border-color: rgba(255, 255, 255, 0.12); + cursor: default; +} + .admin-edit-modal-card .profile-feedback { margin-bottom: 0.55rem; padding: 0.65rem 0.8rem;