fix: save button now fully persists canvas to DB
Root cause: handleAddNode/handleEdgeConfirm only updated Zustand store, never creating records in the DB. canvasApi.save() only updated positions of existing nodes, so nothing survived a page refresh. Fix: save now sends the full canvas state (all nodes + edges + data) and the backend does a full sync — upsert incoming, delete anything removed. This means Save is the single source of truth: no need to call individual create/update/delete APIs for every drag or edit.
This commit is contained in:
@@ -1,17 +1,42 @@
|
||||
from typing import Any
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
from app.schemas.edges import EdgeResponse
|
||||
from app.schemas.nodes import NodeResponse
|
||||
|
||||
|
||||
class NodePosition(BaseModel):
|
||||
class NodeSave(BaseModel):
|
||||
id: str
|
||||
x: float
|
||||
y: float
|
||||
type: str
|
||||
label: str
|
||||
hostname: str | None = None
|
||||
ip: str | None = None
|
||||
mac: str | None = None
|
||||
os: str | None = None
|
||||
status: str = "unknown"
|
||||
check_method: str | None = None
|
||||
check_target: str | None = None
|
||||
services: list[Any] = []
|
||||
notes: str | None = None
|
||||
parent_id: str | None = None
|
||||
pos_x: float = 0
|
||||
pos_y: float = 0
|
||||
|
||||
|
||||
class EdgeSave(BaseModel):
|
||||
id: str
|
||||
source: str
|
||||
target: str
|
||||
type: str = "ethernet"
|
||||
label: str | None = None
|
||||
vlan_id: int | None = None
|
||||
speed: str | None = None
|
||||
|
||||
|
||||
class CanvasSaveRequest(BaseModel):
|
||||
node_positions: list[NodePosition] = []
|
||||
nodes: list[NodeSave] = []
|
||||
edges: list[EdgeSave] = []
|
||||
viewport: dict = {}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user