From b28798a0fc26c34339e38897cae17bba99486163 Mon Sep 17 00:00:00 2001 From: 12975 <1297598740@qq.com> Date: Thu, 29 Jan 2026 23:13:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E4=BC=9A=E8=AE=A1?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E6=A0=B8=E5=BF=83TypeScript=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E5=AE=9A=E4=B9=89=E5=92=8C=E8=AE=BE=E7=BD=AE=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/settingsService.ts | 54 +++++++++++++++++++++++++-------- src/types/index.ts | 5 +++ 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/services/settingsService.ts b/src/services/settingsService.ts index a067d5b..c9ea4d6 100644 --- a/src/services/settingsService.ts +++ b/src/services/settingsService.ts @@ -13,15 +13,43 @@ import type { UpdateDefaultAccountsInput, } from '../types'; +// Helper to map backend snake_case to frontend camelCase +function mapSettingsResponse(data: any): UserSettings { + return { + id: data.id, + userId: data.user_id, + preciseTimeEnabled: data.precise_time_enabled, + iconLayout: data.icon_layout, + imageCompression: data.image_compression, + showReimbursementBtn: data.show_reimbursement_btn, + showRefundBtn: data.show_refund_btn, + currentLedgerId: data.current_ledger_id, + createdAt: data.created_at, + updatedAt: data.updated_at, + // Add these just in case they are returned in the main object + defaultExpenseAccountId: data.default_expense_account_id, + defaultIncomeAccountId: data.default_income_account_id, + }; +} + +function mapDefaultAccountsResponse(data: any): DefaultAccountsSettings { + return { + defaultExpenseAccountId: data.default_expense_account_id, + defaultIncomeAccountId: data.default_income_account_id, + defaultExpenseAccount: data.default_expense_account, + defaultIncomeAccount: data.default_income_account, + }; +} + /** * Get user settings */ export async function getSettings(): Promise { - const response = await api.get>('/settings'); + const response = await api.get>('/settings'); if (!response.data) { throw new Error(response.error || 'Failed to get settings'); } - return response.data; + return mapSettingsResponse(response.data); } /** @@ -29,19 +57,19 @@ export async function getSettings(): Promise { */ export async function updateSettings(data: Partial): Promise { const payload: Record = {}; - + if (data.preciseTimeEnabled !== undefined) payload.precise_time_enabled = data.preciseTimeEnabled; if (data.iconLayout !== undefined) payload.icon_layout = data.iconLayout; if (data.imageCompression !== undefined) payload.image_compression = data.imageCompression; if (data.showReimbursementBtn !== undefined) payload.show_reimbursement_btn = data.showReimbursementBtn; if (data.showRefundBtn !== undefined) payload.show_refund_btn = data.showRefundBtn; if (data.currentLedgerId !== undefined) payload.current_ledger_id = data.currentLedgerId; - - const response = await api.put>('/settings', payload); + + const response = await api.put>('/settings', payload); if (!response.data) { throw new Error(response.error || 'Failed to update settings'); } - return response.data; + return mapSettingsResponse(response.data); } /** @@ -49,11 +77,11 @@ export async function updateSettings(data: Partial): Promise { - const response = await api.get>('/settings/default-accounts'); + const response = await api.get>('/settings/default-accounts'); if (!response.data) { throw new Error(response.error || 'Failed to get default accounts'); } - return response.data; + return mapDefaultAccountsResponse(response.data); } /** @@ -64,22 +92,22 @@ export async function updateDefaultAccounts( data: UpdateDefaultAccountsInput ): Promise { const payload: Record = {}; - + if (data.defaultExpenseAccountId !== undefined) { payload.default_expense_account_id = data.defaultExpenseAccountId; } if (data.defaultIncomeAccountId !== undefined) { payload.default_income_account_id = data.defaultIncomeAccountId; } - - const response = await api.put>( + + const response = await api.put>( '/settings/default-accounts', payload ); if (!response.data) { throw new Error(response.error || 'Failed to update default accounts'); } - return response.data; + return mapDefaultAccountsResponse(response.data); } /** @@ -90,7 +118,7 @@ export async function getSettingsWithDefaults(): Promise