better partial config update

This commit is contained in:
Simon 2025-02-14 16:31:12 +07:00
parent f36490f491
commit 46c974c078
No known key found for this signature in database
GPG Key ID: 2C15AA5E89985DD4
6 changed files with 10 additions and 17 deletions

View File

@ -64,7 +64,7 @@ class AppConfigAppSerializer(
enable_snapshot = serializers.BooleanField()
class AppConfigSerializer(serializers.Serializer):
class AppConfigSerializer(ValidateUnknownFieldsMixin, serializers.Serializer):
"""serialize appconfig"""
subscriptions = AppConfigSubSerializer(required=False)

View File

@ -177,8 +177,8 @@ class AppConfigApiView(ApiBaseView):
},
)
def post(request):
"""update config values, partial"""
serializer = AppConfigSerializer(data=request.data)
"""update config values, allows partial update"""
serializer = AppConfigSerializer(data=request.data, partial=True)
serializer.is_valid(raise_exception=True)
validated_data = serializer.validated_data
updated_config = AppConfig().update_config(validated_data)

View File

@ -48,13 +48,6 @@ class UserMeConfigSerializer(serializers.Serializer):
show_subed_only = serializers.BooleanField()
show_help_text = serializers.BooleanField()
def __init__(self, *args, required=True, **kwargs):
super().__init__(*args, **kwargs)
# Override 'required' for all fields if provided
for field in self.fields.values():
field.required = required
class LoginSerializer(serializers.Serializer):
"""serialize login"""

View File

@ -61,7 +61,7 @@ class UserConfigView(ApiBaseView):
"""update config, allows partial update"""
data_serializer = UserMeConfigSerializer(
data=request.data, required=False
data=request.data, partial=True
)
data_serializer.is_valid(raise_exception=True)
validated_data = data_serializer.validated_data

View File

@ -1,12 +1,10 @@
import APIClient from '../../functions/APIClient';
import { AppSettingsConfigType } from '../loader/loadAppsettingsConfig';
const updateAppsettingsConfig = async (
configKey: string,
configValue: string | boolean | number | null,
) => {
const updateAppsettingsConfig = async (updatedConfig: Partial<AppSettingsConfigType>) => {
return APIClient('/api/appsettings/config/', {
method: 'POST',
body: { [configKey]: configValue },
body: updatedConfig,
});
};

View File

@ -151,7 +151,9 @@ const SettingsApplication = () => {
configKey: string,
configValue: string | boolean | number | null,
) => {
await updateAppsettingsConfig(configKey, configValue);
const [group, key] = configKey.split('.');
const updatedConfig = { [group]: { [key]: configValue } } as Partial<AppSettingsConfigType>;
await updateAppsettingsConfig(updatedConfig);
setRefresh(true);
};