From d11b43b69f384ebed3242d3e79a0a2e77608543f Mon Sep 17 00:00:00 2001 From: Fusion Date: Wed, 20 May 2026 15:17:33 +0200 Subject: [PATCH] fix(settings): properly save and clear configuration values Backend: - Replace dict mutation with dict replacement to fix SQLAlchemy JSON mutation tracking issue (config.config = {**config.config, **update_data}) Frontend: - Send explicit null values instead of undefined so fields can be cleared - Update UserConfigUpdate interface to accept null values --- apps/api/src/api/user_config.py | 3 ++- apps/web/src/api/settings.ts | 10 +++++----- apps/web/src/pages/settings.tsx | 6 +++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/api/src/api/user_config.py b/apps/api/src/api/user_config.py index af2da07..917bfa9 100644 --- a/apps/api/src/api/user_config.py +++ b/apps/api/src/api/user_config.py @@ -112,7 +112,8 @@ async def update_user_config( # Merge updates update_data = data.model_dump(exclude_unset=True) logger.info("Updating user config for user %s: %s", user_id, update_data) - config.config.update(update_data) + # SQLAlchemy JSON doesn't track dict mutations, so we replace the whole dict + config.config = {**config.config, **update_data} await session.commit() await session.refresh(config) diff --git a/apps/web/src/api/settings.ts b/apps/web/src/api/settings.ts index 4114854..af99e89 100644 --- a/apps/web/src/api/settings.ts +++ b/apps/web/src/api/settings.ts @@ -9,11 +9,11 @@ export interface UserConfig { } export interface UserConfigUpdate { - default_editor?: string; - theme?: string; - git_user_name?: string; - git_user_email?: string; - last_session_id?: string; + default_editor?: string | null; + theme?: string | null; + git_user_name?: string | null; + git_user_email?: string | null; + last_session_id?: string | null; } export const getUserConfig = async (): Promise => { diff --git a/apps/web/src/pages/settings.tsx b/apps/web/src/pages/settings.tsx index d8478f7..3d28e4b 100644 --- a/apps/web/src/pages/settings.tsx +++ b/apps/web/src/pages/settings.tsx @@ -46,9 +46,9 @@ export const SettingsPage = () => { try { const update: UserConfigUpdate = { theme: config.theme, - default_editor: config.default_editor ?? undefined, - git_user_name: config.git_user_name ?? undefined, - git_user_email: config.git_user_email ?? undefined, + default_editor: config.default_editor, + git_user_name: config.git_user_name, + git_user_email: config.git_user_email, }; console.log("Sending update:", update); const updated = await updateUserConfig(update);