diff --git a/backend/internal/models/settings.go b/backend/internal/models/settings.go index 31a833d..7552657 100644 --- a/backend/internal/models/settings.go +++ b/backend/internal/models/settings.go @@ -13,7 +13,7 @@ type UserSettings struct { type Settings struct { UserID int `json:"userId" validate:"required,min=1"` - Settings UserSettings `json:"settings" validate:"required,dive"` + Settings UserSettings `json:"settings" validate:"required"` } var validate = validator.New() diff --git a/frontend/src/App.js b/frontend/src/App.js index 4b1f1c2..eb580f5 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -1,12 +1,14 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { GeistProvider, CssBaseline, Page } from '@geist-ui/core'; import Header from './components/Header'; import MainContent from './components/MainContent'; import useFileManagement from './hooks/useFileManagement'; +import { fetchUserSettings } from './services/api'; import './App.scss'; function App() { const [themeType, setThemeType] = useState('light'); + const [userId, setUserId] = useState(1); const { content, files, @@ -19,6 +21,19 @@ function App() { handleSave, } = useFileManagement(); + useEffect(() => { + const loadUserSettings = async () => { + try { + const settings = await fetchUserSettings(userId); + setThemeType(settings.settings.theme); + } catch (error) { + console.error('Failed to load user settings:', error); + } + }; + + loadUserSettings(); + }, [userId]); + const toggleTheme = () => { setThemeType(prevTheme => prevTheme === 'light' ? 'dark' : 'light'); }; diff --git a/frontend/src/components/Settings.js b/frontend/src/components/Settings.js index 19fd716..8fe202f 100644 --- a/frontend/src/components/Settings.js +++ b/frontend/src/components/Settings.js @@ -1,13 +1,30 @@ import React, { useState } from 'react'; import { Modal, Text, Toggle, Tooltip, Spacer, useTheme } from '@geist-ui/core'; +import { saveUserSettings } from '../services/api'; -const Settings = ({ visible, onClose, currentTheme, onThemeChange, onSettingsChange }) => { +const Settings = ({ visible, onClose, currentTheme, onThemeChange }) => { const theme = useTheme(); const [autoSave, setAutoSave] = useState(false); + const userId = 1; - const handleSubmit = () => { - onSettingsChange({ fontSize, autoSave }); - onClose(); + const handleSubmit = async () => { + try { + await saveUserSettings({ + userId: userId, + settings: { + theme: currentTheme, + autoSave: autoSave + } + }); + onClose(); + } catch (error) { + console.error('Failed to save settings:', error); + // You might want to show an error message to the user here + } + }; + + const handleThemeChange = () => { + onThemeChange(); }; const disabledMessage = "This feature is not yet implemented"; @@ -22,7 +39,7 @@ const Settings = ({ visible, onClose, currentTheme, onThemeChange, onSettingsCha Dark Mode onThemeChange()} + onChange={handleThemeChange} /> diff --git a/frontend/src/services/api.js b/frontend/src/services/api.js index 74eeaab..02e0355 100644 --- a/frontend/src/services/api.js +++ b/frontend/src/services/api.js @@ -40,4 +40,36 @@ export const saveFileContent = async (filePath, content) => { } return await response.text(); - }; \ No newline at end of file + }; + + export const fetchUserSettings = async (userId) => { + try { + const response = await fetch(`${API_BASE_URL}/settings?userId=${userId}`); + if (!response.ok) { + throw new Error('Failed to fetch user settings'); + } + return await response.json(); + } catch (error) { + console.error('Error fetching user settings:', error); + throw error; + } +}; + +export const saveUserSettings = async (settings) => { + try { + const response = await fetch(`${API_BASE_URL}/settings`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(settings), + }); + if (!response.ok) { + throw new Error('Failed to save user settings'); + } + return await response.json(); + } catch (error) { + console.error('Error saving user settings:', error); + throw error; + } +}; \ No newline at end of file