Persist circuit structure edits
This commit is contained in:
@@ -36,8 +36,9 @@ snapshots contain zero, one or multiple complete device rows. Move commands
|
||||
contain each row's expected and target circuit plus its exact expected and
|
||||
target sort order. This makes deletion and moves undoable without generating
|
||||
replacement identities or renumbering circuits. Existing Circuit and
|
||||
CircuitDeviceRow cell edits in the editor consume these endpoints; the
|
||||
remaining structural editor writes are still being migrated.
|
||||
CircuitDeviceRow cell edits plus standalone insert/delete actions in the editor
|
||||
consume these endpoints. Move, reorder and renumber UI paths are still being
|
||||
migrated.
|
||||
|
||||
`circuit-device-row.move` targets existing circuits in the same circuit list.
|
||||
`circuit-device-row.move-with-new-circuit` atomically creates exactly one
|
||||
@@ -163,39 +164,17 @@ Response sketch:
|
||||
}
|
||||
```
|
||||
|
||||
### Circuit CRUD
|
||||
### Circuit Structure
|
||||
|
||||
- `POST /projects/:projectId/circuit-lists/:circuitListId/circuits`
|
||||
- create circuit in list/section
|
||||
- `POST /projects/:projectId/circuit-lists/:circuitListId/circuits-with-device-rows`
|
||||
- atomically create one circuit and one or more initial device rows
|
||||
- `DELETE /circuits/:circuitId`
|
||||
- delete circuit (and related rows via DB relations)
|
||||
- `GET /circuit-sections/:sectionId/next-identifier`
|
||||
- preview next identifier for section (`prefix + maxSuffix + 1`)
|
||||
|
||||
Request sketch (`POST .../circuits`):
|
||||
|
||||
```json
|
||||
{
|
||||
"sectionId": "sec_1",
|
||||
"equipmentIdentifier": "-2F14",
|
||||
"displayName": "Sockets East",
|
||||
"sortOrder": 140
|
||||
}
|
||||
```
|
||||
|
||||
### Device Row CRUD
|
||||
|
||||
- `POST /circuits/:circuitId/device-rows`
|
||||
- create row inside a circuit
|
||||
- `DELETE /circuit-device-rows/:rowId`
|
||||
- delete row
|
||||
|
||||
Circuit and device-row field updates are available only as versioned
|
||||
`circuit.update` and `circuit-device-row.update` commands through
|
||||
`POST /projects/:projectId/commands`. There are no direct field-update PATCH
|
||||
routes.
|
||||
Circuit and device-row field updates, standalone insertions and standalone
|
||||
deletions are available only as the corresponding versioned commands through
|
||||
`POST /projects/:projectId/commands`. There are no direct field-update PATCH,
|
||||
structure POST or CircuitDeviceRow DELETE routes. The direct
|
||||
`DELETE /circuits/:circuitId` route remains temporarily for the inverse of the
|
||||
not-yet-migrated placeholder move UI and must not be used by new features.
|
||||
|
||||
### Move Device Row
|
||||
|
||||
|
||||
@@ -123,10 +123,12 @@ Cross-section device moves show confirmation-required feedback before drop. The
|
||||
## Undo/Redo
|
||||
|
||||
Undo/redo wraps editor operations as command objects and reloads the tree after
|
||||
each command. Existing Circuit and device-row cell edits execute persistent
|
||||
project commands; their toolbar undo/redo calls the project-wide server
|
||||
history. Other covered operations still use their existing direct API writes
|
||||
and session-local inverse callbacks during the cutover.
|
||||
each command. Existing Circuit and device-row cell edits plus standalone
|
||||
insert/delete actions execute persistent project commands; their toolbar
|
||||
undo/redo calls the project-wide server history. New entities receive stable
|
||||
UUIDs before insertion, and deletion undo restores those same ids. Move,
|
||||
reorder and renumber operations still use their existing direct API writes and
|
||||
session-local inverse callbacks during the cutover.
|
||||
|
||||
Covered operations include:
|
||||
|
||||
@@ -140,5 +142,5 @@ Covered operations include:
|
||||
Current limitations:
|
||||
|
||||
- the visible editor stack is still session-local and is empty after reload
|
||||
- structural and destructive editor actions are not all connected to the
|
||||
persistent command boundary yet
|
||||
- move, reorder and renumber editor actions are not connected to the persistent
|
||||
command boundary yet
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
# Circuit List Editor Known Limitations
|
||||
|
||||
- Existing Circuit and CircuitDeviceRow cell edits use persistent project
|
||||
commands and project-wide toolbar undo/redo. The editor's visible stack is
|
||||
still session-local, is empty after reload and still contains direct
|
||||
structural/destructive operations during the cutover.
|
||||
- Existing Circuit and CircuitDeviceRow cell edits plus standalone
|
||||
insert/delete actions use persistent project commands and project-wide
|
||||
toolbar undo/redo. The editor's visible stack is still session-local, is
|
||||
empty after reload and still contains direct move/reorder/renumber operations
|
||||
during the cutover.
|
||||
- Server-side project revisions and persistent undo/redo eligibility exist for
|
||||
the command types documented in `circuit-list-editor-api.md`; complete editor
|
||||
command coverage and history reconstruction are not complete.
|
||||
|
||||
@@ -87,12 +87,14 @@ wiederherstellt. `circuit.insert` und `circuit.delete` behandeln einen
|
||||
Stromkreis mit null, einer oder mehreren Gerätezeilen als vollständigen Block.
|
||||
Undo bewahrt dabei sämtliche Circuit-/Row-UUIDs und ändert keine
|
||||
Betriebsmittelkennzeichen. Bestehende Circuit- und Gerätezeilen-Zelländerungen
|
||||
verwendet das Grid bereits über die öffentliche Command-Grenze. Der Tree liefert
|
||||
dazu `currentRevision`; Undo/Redo für diese Zellaktionen läuft über die
|
||||
projektweite Serverhistorie. Die direkten PATCH-Endpunkte für diese Felder sind
|
||||
entfernt. Andere Editoraktionen verbleiben vorerst im sichtbaren
|
||||
sitzungslokalen Stack; nach einem Reload wird dieser noch nicht aus der
|
||||
Serverhistorie rekonstruiert.
|
||||
sowie eigenständiges Einfügen und Löschen verwendet das Grid bereits über die
|
||||
öffentliche Command-Grenze. Neue Circuits und Gerätezeilen erhalten ihre stabile
|
||||
UUID vor dem Command; Löschen und Undo bewahren diese Identität. Der Tree liefert
|
||||
dazu `currentRevision`; Undo/Redo für diese Aktionen läuft über die projektweite
|
||||
Serverhistorie. Direkte Feld-PATCH-, Struktur-POST- und Gerätezeilen-DELETE-
|
||||
Endpunkte sind entfernt. Move-, Reorder- und Renumber-UI-Pfade verbleiben
|
||||
vorerst im sichtbaren sitzungslokalen Stack; nach einem Reload wird dieser noch
|
||||
nicht aus der Serverhistorie rekonstruiert.
|
||||
`circuit-device-row.move` verschiebt oder sortiert eine oder mehrere Zeilen
|
||||
zwischen vorhandenen Stromkreisen derselben Liste. Erwartete und neue
|
||||
Stromkreis-/Sortierpositionen machen Forward und Inverse deterministisch;
|
||||
|
||||
@@ -184,6 +184,9 @@ Completed foundation:
|
||||
- `circuit.insert` and `circuit.delete` persist a complete circuit block with
|
||||
zero, one or multiple device rows; undo restores all ids and fields without
|
||||
renumbering
|
||||
- standalone Circuit/CircuitDeviceRow insert/delete UI paths use these commands
|
||||
with client-generated stable UUIDs; obsolete direct structure POST and
|
||||
CircuitDeviceRow DELETE routes are removed
|
||||
- `circuit-device-row.move` stores exact expected and target circuit/sort
|
||||
positions for one or multiple rows, recalculates all affected reserve states
|
||||
and reconstructs a deterministic inverse across multiple source circuits
|
||||
@@ -208,17 +211,14 @@ Completed foundation:
|
||||
|
||||
Remaining constraints before completing persistent history:
|
||||
|
||||
- extend the concrete project-scoped command union and executors beyond the
|
||||
Circuit field/insert/delete and CircuitDeviceRow
|
||||
field/insert/delete/move, section-reorder/renumber and ProjectDevice
|
||||
field/insert/delete/row-sync slices; the generic versioned command envelope
|
||||
is complete
|
||||
- route the remaining structural and destructive domain
|
||||
writes through the shared command, revision and stack transaction boundary
|
||||
- finish routing structural and destructive circuit-editor operations through
|
||||
persistent commands, then reconstruct the visible frontend history state
|
||||
after reload; Circuit/CircuitDeviceRow cell edits and ProjectDevice
|
||||
synchronization already use persistent commands and project-wide undo
|
||||
- route the remaining move, reorder and renumber editor writes through their
|
||||
existing typed persistent commands and remove the final direct mutation
|
||||
routes
|
||||
- reconstruct the visible frontend history state after reload; Circuit and
|
||||
CircuitDeviceRow field/insert/delete actions plus ProjectDevice operations
|
||||
already use persistent commands and project-wide undo
|
||||
- extend project-scoped commands only when further project mutations are
|
||||
deliberately added to history; the generic versioned envelope is complete
|
||||
- do not model IFCGUID as an overloaded circuit equipment identifier
|
||||
- keep database backup/restore checks separate from project history tests
|
||||
|
||||
|
||||
@@ -398,6 +398,9 @@ Implemented foundation:
|
||||
stack transition commit or roll back together
|
||||
- typed Circuit insert/delete commands treat the circuit and all device rows as
|
||||
one block, preserve every stable id and never renumber neighbouring circuits
|
||||
- standalone Circuit/CircuitDeviceRow insert/delete editor paths use those
|
||||
commands with stable client-generated UUIDs and project-wide undo/redo; the
|
||||
obsolete direct structure POST and CircuitDeviceRow DELETE routes are removed
|
||||
- typed CircuitDeviceRow move commands persist exact old/new circuit and sort
|
||||
positions for single or multi-row moves between existing circuits and derive
|
||||
affected reserve states in the same transaction
|
||||
@@ -428,9 +431,9 @@ Implemented foundation:
|
||||
and rollback after a forced late persistence failure
|
||||
|
||||
ProjectDevice CRUD, synchronization and disconnect on the project page and
|
||||
existing Circuit/CircuitDeviceRow cell edits in the circuit-list editor are
|
||||
connected to this history boundary. Remaining structural editor writes are not
|
||||
fully connected; the editor's visible undo/redo stack therefore remains
|
||||
Circuit/CircuitDeviceRow field/insert/delete actions in the circuit-list editor
|
||||
are connected to this history boundary. Move, reorder and renumber UI paths are
|
||||
not yet connected; the editor's visible undo/redo stack therefore remains
|
||||
session-local and is not reconstructed after reload.
|
||||
|
||||
Acceptance criteria:
|
||||
|
||||
Reference in New Issue
Block a user