feat: split scan config and app settings into separate endpoints

- New GET/POST /api/v1/settings for status check interval
- Scan /api/v1/scan/config now handles ranges only
- Frontend: settingsApi client, SettingsPanel uses settingsApi
- ScanConfigModal no longer reads/writes interval
- 4 new backend tests for settings endpoint
This commit is contained in:
Pouzor
2026-03-30 23:06:51 +02:00
parent 381f870bb5
commit 68c7672cea
8 changed files with 100 additions and 30 deletions
+5 -9
View File
@@ -3,7 +3,7 @@ import { Plus, Save, ScanLine, ChevronLeft, ChevronRight, LayoutDashboard, Clock
import { Logo } from '@/components/ui/Logo'
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'
import { useCanvasStore } from '@/stores/canvasStore'
import { scanApi } from '@/api/client'
import { scanApi, settingsApi } from '@/api/client'
import { toast } from 'sonner'
import { PendingDeviceModal, type PendingDevice } from '@/components/modals/PendingDeviceModal'
@@ -429,22 +429,18 @@ function ScanHistoryPanel() {
function SettingsPanel() {
const [interval, setIntervalValue] = useState(60)
const [ranges, setRangesValue] = useState<string[]>([])
const [saving, setSaving] = useState(false)
useEffect(() => {
scanApi.getConfig()
.then((res) => {
setIntervalValue(res.data.interval_seconds)
setRangesValue(res.data.ranges)
})
.catch(() => {/* use current defaults */})
settingsApi.get()
.then((res) => setIntervalValue(res.data.interval_seconds))
.catch(() => {/* use default */})
}, [])
const handleSave = async () => {
setSaving(true)
try {
await scanApi.saveConfig({ ranges, interval_seconds: interval })
await settingsApi.save({ interval_seconds: interval })
toast.success('Settings saved')
} catch {
toast.error('Failed to save settings')