Preserve editable routes across source projects and REST

This commit is contained in:
2026-09-05 20:19:38 +03:00
parent 4e5a88dc4d
commit a7c6f9678c
8 changed files with 718 additions and 6 deletions
+85
View File
@@ -1735,6 +1735,51 @@
],
"additionalProperties": false
},
"EdgeLabel": {
"type": "object",
"description": "Authored label placement relative to the computed polyline. Both fields are required.",
"properties": {
"fraction": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Fraction of source-to-target polyline arc length."
},
"offset": {
"$ref": "#/components/schemas/Position",
"description": "Relative diagram-space displacement."
}
},
"required": ["fraction", "offset"],
"additionalProperties": false
},
"EdgeRoute": {
"type": "object",
"description": "One diagram's authored route for an existing Relation or Trace, including currently hidden edges. No separate identity. Only pinned points are stored; explicit empty routes are retained.",
"properties": {
"edge": {
"type": "string",
"format": "uuid",
"description": "Existing Relation or Trace identity, never a node placement."
},
"waypoints": {
"type": "array",
"items": { "$ref": "#/components/schemas/Position" },
"maxItems": 128,
"default": [],
"description": "Absolute diagram positions in traversal order."
},
"label": {
"oneOf": [
{ "$ref": "#/components/schemas/EdgeLabel" },
{ "type": "null" }
],
"default": null
}
},
"required": ["edge"],
"additionalProperties": false
},
"Size": {
"type": "object",
"properties": {
@@ -3445,6 +3490,12 @@
"additionalProperties": {
"$ref": "#/components/schemas/NodePlacement"
}
},
"routes": {
"type": "array",
"items": { "$ref": "#/components/schemas/EdgeRoute" },
"default": [],
"description": "Unique by edge identity within this diagram. Stored order is retained. Each entry counts against the total model record admission limit. Missing routes in earlier schema-3 models default to empty."
}
},
"required": [
@@ -4406,6 +4457,40 @@
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"SetEdgeRoute": {
"type": "object",
"description": "Upsert by edge identity; preserves unrelated route entries and order. Uses existing transaction validation and ETag checks.",
"properties": {
"diagram": { "type": "string", "format": "uuid" },
"route": { "$ref": "#/components/schemas/EdgeRoute" }
},
"required": ["diagram", "route"],
"additionalProperties": false
}
},
"required": ["SetEdgeRoute"],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"RemoveEdgeRoute": {
"type": "object",
"description": "Reset to automatic routing. No-op if this existing diagram has no route for the existing edge.",
"properties": {
"diagram": { "type": "string", "format": "uuid" },
"edge": { "type": "string", "format": "uuid" }
},
"required": ["diagram", "edge"],
"additionalProperties": false
}
},
"required": ["RemoveEdgeRoute"],
"additionalProperties": false
},
{
"type": "object",
"properties": {