From 22be49976a24d4e64f49293b92c1f5d0b2884771 Mon Sep 17 00:00:00 2001 From: sam Date: Sun, 6 Apr 2025 15:32:26 +0200 Subject: [PATCH] feat(backend): return settings in GET /users/@me --- .../Controllers/UsersController.cs | 19 +++++++++---------- Foxnouns.Backend/Dto/User.cs | 3 ++- .../Services/UserRendererService.cs | 7 ++++++- Foxnouns.Frontend/src/lib/api/models/user.ts | 1 + 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/Foxnouns.Backend/Controllers/UsersController.cs b/Foxnouns.Backend/Controllers/UsersController.cs index 48a42aa..31aa98a 100644 --- a/Foxnouns.Backend/Controllers/UsersController.cs +++ b/Foxnouns.Backend/Controllers/UsersController.cs @@ -46,7 +46,15 @@ public class UsersController( { User user = await db.ResolveUserAsync(userRef, CurrentToken, ct); return Ok( - await userRenderer.RenderUserAsync(user, CurrentUser, CurrentToken, true, true, ct: ct) + await userRenderer.RenderUserAsync( + user, + CurrentUser, + CurrentToken, + renderMembers: true, + renderAuthMethods: true, + renderSettings: true, + ct: ct + ) ); } @@ -261,15 +269,6 @@ public class UsersController( return Ok(user.CustomPreferences); } - [HttpGet("@me/settings")] - [Authorize("user.read_hidden")] - [ProducesResponseType(statusCode: StatusCodes.Status200OK)] - public async Task GetUserSettingsAsync(CancellationToken ct = default) - { - User user = await db.Users.FirstAsync(u => u.Id == CurrentUser!.Id, ct); - return Ok(user.Settings); - } - [HttpPatch("@me/settings")] [Authorize("user.read_hidden", "user.update")] [ProducesResponseType(statusCode: StatusCodes.Status200OK)] diff --git a/Foxnouns.Backend/Dto/User.cs b/Foxnouns.Backend/Dto/User.cs index db4780a..83121d1 100644 --- a/Foxnouns.Backend/Dto/User.cs +++ b/Foxnouns.Backend/Dto/User.cs @@ -49,7 +49,8 @@ public record UserResponse( [property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)] Instant? LastSidReroll, [property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)] string? Timezone, [property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)] bool? Suspended, - [property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)] bool? Deleted + [property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)] bool? Deleted, + [property: JsonProperty(NullValueHandling = NullValueHandling.Ignore)] UserSettings? Settings ); public record CustomPreferenceResponse( diff --git a/Foxnouns.Backend/Services/UserRendererService.cs b/Foxnouns.Backend/Services/UserRendererService.cs index 5a90c2d..0c1fc1b 100644 --- a/Foxnouns.Backend/Services/UserRendererService.cs +++ b/Foxnouns.Backend/Services/UserRendererService.cs @@ -33,6 +33,7 @@ public class UserRendererService( bool renderMembers = true, bool renderAuthMethods = false, string? overrideSid = null, + bool renderSettings = false, CancellationToken ct = default ) => await RenderUserInnerAsync( @@ -42,6 +43,7 @@ public class UserRendererService( renderMembers, renderAuthMethods, overrideSid, + renderSettings, ct ); @@ -52,6 +54,7 @@ public class UserRendererService( bool renderMembers = true, bool renderAuthMethods = false, string? overrideSid = null, + bool renderSettings = false, CancellationToken ct = default ) { @@ -62,6 +65,7 @@ public class UserRendererService( renderMembers = renderMembers && (!user.ListHidden || tokenCanReadHiddenMembers); renderAuthMethods = renderAuthMethods && tokenPrivileged; + renderSettings = renderSettings && tokenHidden; IEnumerable members = renderMembers ? await db.Members.Where(m => m.UserId == user.Id).OrderBy(m => m.Name).ToListAsync(ct) @@ -117,7 +121,8 @@ public class UserRendererService( tokenHidden ? user.LastSidReroll : null, tokenHidden ? user.Timezone ?? "" : null, tokenHidden ? user is { Deleted: true, DeletedBy: not null } : null, - tokenHidden ? user.Deleted : null + tokenHidden ? user.Deleted : null, + renderSettings ? user.Settings : null ); } diff --git a/Foxnouns.Frontend/src/lib/api/models/user.ts b/Foxnouns.Frontend/src/lib/api/models/user.ts index 6cd8e4c..0610b9c 100644 --- a/Foxnouns.Frontend/src/lib/api/models/user.ts +++ b/Foxnouns.Frontend/src/lib/api/models/user.ts @@ -28,6 +28,7 @@ export type MeUser = UserWithMembers & { timezone: string; suspended: boolean; deleted: boolean; + settings: UserSettings; }; export type UserWithMembers = User & { members: PartialMember[] | null };