Skip to content

Commit a3e1ec3

Browse files
committed
feat: enhance global settings handling with proper type conversion for boolean and number values
1 parent 60fa4f2 commit a3e1ec3

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

services/backend/src/routes/globalSettings/index.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -665,9 +665,17 @@ export default async function globalSettingsRoute(fastify: FastifyInstance) {
665665

666666
for (const settingData of settings) {
667667
try {
668+
// Convert value to proper type if needed
669+
let processedValue = settingData.value;
670+
if (settingData.type === 'boolean' && typeof settingData.value === 'string') {
671+
processedValue = settingData.value.toLowerCase() === 'true';
672+
} else if (settingData.type === 'number' && typeof settingData.value === 'string') {
673+
processedValue = Number(settingData.value);
674+
}
675+
668676
const setting = await GlobalSettingsService.setTyped(
669677
settingData.key,
670-
settingData.value,
678+
processedValue,
671679
settingData.type,
672680
{
673681
description: settingData.description,
@@ -677,6 +685,7 @@ export default async function globalSettingsRoute(fastify: FastifyInstance) {
677685
);
678686
results.push(setting);
679687
} catch (error) {
688+
fastify.log.error(`Error processing setting ${settingData.key}:`, error);
680689
errors.push({
681690
key: settingData.key,
682691
error: error instanceof Error ? error.message : 'Unknown error',

services/backend/src/services/passwordResetService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ export class PasswordResetService {
121121
return { success: false, error: 'User not found or not eligible for password reset' };
122122
}
123123

124-
const user = users[0];
124+
// const user = users[0];
125125

126126
// Hash new password
127127
const hashedNewPassword = await hash(newPassword, {

services/frontend/src/views/admin/GlobalSettings.vue

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,20 @@ async function handleSubmit(event: Event) {
140140
// Convert form values to API format
141141
const settingsToUpdate = Object.entries(formValues.value).map(([key, value]) => {
142142
const setting = selectedGroup.value?.settings?.find(s => s.key === key)
143+
144+
// Ensure proper type conversion based on setting type
145+
let typedValue = value
146+
if (setting?.type === 'boolean') {
147+
typedValue = Boolean(value)
148+
} else if (setting?.type === 'number') {
149+
typedValue = Number(value)
150+
} else {
151+
typedValue = String(value)
152+
}
153+
143154
return {
144155
key,
145-
value: value, // API expects typed values (string, number, boolean)
156+
value: typedValue, // API expects typed values (string, number, boolean)
146157
type: setting?.type,
147158
group_id: selectedGroup.value?.id,
148159
description: setting?.description,
@@ -274,7 +285,10 @@ async function handleSubmit(event: Event) {
274285
<div v-else-if="setting.type === 'boolean'">
275286
<Switch
276287
:id="`setting-${setting.key}`"
277-
v-model="formValues[setting.key] as boolean"
288+
:model-value="formValues[setting.key] as boolean"
289+
@update:model-value="(value: boolean) => {
290+
formValues[setting.key] = value
291+
}"
278292
/>
279293
</div>
280294

0 commit comments

Comments
 (0)