From 2e3fde24483faa3b5ccba65cce95b2da124abaf2 Mon Sep 17 00:00:00 2001 From: Logan Cusano Date: Sun, 12 Jul 2026 23:20:39 -0400 Subject: [PATCH] refactor: Clean checkin override parsing and require node type in frontend configuration modal --- drb-c2-core/app/internal/mqtt_handler.py | 14 ++++++++------ drb-frontend/components/NodeConfigModal.tsx | 8 +++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/drb-c2-core/app/internal/mqtt_handler.py b/drb-c2-core/app/internal/mqtt_handler.py index 881dfe9..fc8a51a 100644 --- a/drb-c2-core/app/internal/mqtt_handler.py +++ b/drb-c2-core/app/internal/mqtt_handler.py @@ -1,6 +1,6 @@ import asyncio import json -from datetime import datetime, timezone +from datetime import datetime, timezone, timedelta from typing import Optional import paho.mqtt.client as mqtt from app.config import settings @@ -117,14 +117,17 @@ class MQTTHandler: # Approved but not yet configured — restore reachable status after reboot updates["status"] = "unconfigured" - node_type = payload.get("node_type", existing.get("node_type", "fixed")) - enforce_timeout = payload.get("enforce_override_timeout", existing.get("enforce_override_timeout", True)) - is_overridden = payload.get("is_overridden", False) - override_system_id = payload.get("override_system_id") + node_type = payload.get("node_type") or existing.get("node_type") or "fixed" + enforce_timeout = payload.get("enforce_override_timeout") + if enforce_timeout is None: + enforce_timeout = existing.get("enforce_override_timeout", True) updates["node_type"] = node_type updates["enforce_override_timeout"] = enforce_timeout + is_overridden = payload.get("is_overridden", False) + override_system_id = payload.get("override_system_id") + if node_type == "portable": updates["is_overridden"] = False updates["override_system_id"] = None @@ -138,7 +141,6 @@ class MQTTHandler: existing_override_id = existing.get("override_system_id") if enforce_timeout: if not existing_timeout or existing_override_id != override_system_id: - from datetime import timedelta updates["override_timeout_at"] = (now + timedelta(hours=24)).isoformat() else: updates["override_timeout_at"] = None diff --git a/drb-frontend/components/NodeConfigModal.tsx b/drb-frontend/components/NodeConfigModal.tsx index f5789f4..f6c4bcc 100644 --- a/drb-frontend/components/NodeConfigModal.tsx +++ b/drb-frontend/components/NodeConfigModal.tsx @@ -20,7 +20,7 @@ export function NodeConfigModal({ node, systems, onClose }: Props) { const [systemId, setSystemId] = useState(node.assigned_system_id ?? ""); const [preset, setPreset] = useState(node.hardware_preset ?? "rtl-sdr-v3"); const [ppm, setPpm] = useState(node.ppm_override ? String(node.ppm_override) : "0"); - const [nodeType, setNodeType] = useState(node.node_type ?? "fixed"); + const [nodeType, setNodeType] = useState(node.node_type ?? ""); const [enforceTimeout, setEnforceTimeout] = useState(node.enforce_override_timeout ?? true); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); @@ -107,12 +107,14 @@ export function NodeConfigModal({ node, systems, onClose }: Props) {
- + @@ -138,7 +140,7 @@ export function NodeConfigModal({ node, systems, onClose }: Props) {