Route project devices through history
This commit is contained in:
@@ -76,6 +76,27 @@ recreates the same device and reconnects only rows whose complete disconnected
|
||||
snapshot still matches; device, links, revision and history transition are
|
||||
atomic.
|
||||
|
||||
### Project Device CRUD
|
||||
|
||||
- `GET /project-devices/projects/:projectId`
|
||||
- lists the project's reusable devices
|
||||
- `POST /project-devices/projects/:projectId`
|
||||
- `PUT /project-devices/projects/:projectId/:projectDeviceId`
|
||||
- request: all canonical device fields plus `expectedRevision`
|
||||
- response: `{ "projectDevice": { ... }, "revision": { ... }, "history": { ... } }`
|
||||
- `DELETE /project-devices/projects/:projectId/:projectDeviceId`
|
||||
- request: `{ "expectedRevision": 12 }`
|
||||
- response: the project command result with the updated history state
|
||||
- `POST /project-devices/projects/:projectId/import-global/:globalDeviceId`
|
||||
- request: `{ "expectedRevision": 12 }`
|
||||
- creates an independent project device with a stable UUID
|
||||
- response shape matches ProjectDevice create/update
|
||||
|
||||
These write endpoints execute the typed `project-device.update`,
|
||||
`project-device.insert` and `project-device.delete` commands. A stale revision
|
||||
returns `409 PROJECT_REVISION_CONFLICT`. Updating a project device still never
|
||||
synchronizes linked circuit rows implicitly.
|
||||
|
||||
Example:
|
||||
|
||||
```json
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
# Circuit List Editor Known Limitations
|
||||
|
||||
- Undo/redo history is session-local only.
|
||||
- Undo/redo history is not persisted across reloads or between users.
|
||||
- No project revision or logical snapshot model is implemented yet.
|
||||
- The circuit-list editor still exposes only its session-local undo/redo UI.
|
||||
- Server-side project revisions and persistent undo/redo eligibility exist for
|
||||
the command types documented in `circuit-list-editor-api.md`; command coverage
|
||||
and the editor UI cutover are not complete.
|
||||
- Named logical project snapshots and restore are not implemented yet.
|
||||
- No Revit/CSV/IFCGUID import and export workflow is implemented yet.
|
||||
- Persistence currently targets local SQLite; PostgreSQL is an architectural option, not an implemented runtime.
|
||||
- The global device library supports basic CRUD and copy operations, but has no
|
||||
|
||||
@@ -115,16 +115,17 @@ noch nicht.
|
||||
Projektgerätefeldern unabhängig davon. Der Store erzeugt die Inverse aus dem
|
||||
gespeicherten Gerät und schreibt Geräteänderung, Revision und Historienstapel
|
||||
atomar. Verknüpfte Stromkreiszeilen werden dabei bewusst nicht automatisch
|
||||
synchronisiert. Der bestehende ProjectDevice-`PUT`-Endpunkt verwendet diesen
|
||||
Command bis zum UI-Cutover noch nicht.
|
||||
synchronisiert. Der ProjectDevice-`PUT`-Endpunkt und die Projektseite verwenden
|
||||
diesen Command mit optimistischer Revisionsprüfung.
|
||||
`project-device.insert` und `project-device.delete` versionieren außerdem den
|
||||
Lebenszyklus eines Projektgeräts mit stabiler UUID. Beim Löschen speichert das
|
||||
inverse Insert den vollständigen Gerätestand sowie vollständige, nach dem
|
||||
Löschen erwartete Snapshots aller zuvor verknüpften Gerätezeilen. Undo setzt
|
||||
die Links nur zurück, wenn diese Zeilen weiterhin zum Projekt gehören,
|
||||
unverknüpft und vollständig unverändert sind. Gerät, Linkänderungen, Revision
|
||||
und Historienstapel teilen dieselbe Transaktion. Die bestehenden Create-,
|
||||
Import- und Delete-Endpunkte sind noch nicht umgestellt.
|
||||
und Historienstapel teilen dieselbe Transaktion. Create, Import aus der globalen
|
||||
Gerätebibliothek und Delete laufen über dieselbe Command-Grenze; ihre Antworten
|
||||
liefern Gerät und aktualisierten Historienstand an die Projektseite zurück.
|
||||
|
||||
## Projektgeräte
|
||||
|
||||
|
||||
@@ -413,15 +413,18 @@ Implemented foundation:
|
||||
inverses and never overwrite linked CircuitDeviceRow values implicitly
|
||||
- ProjectDevice insert/delete commands preserve stable device ids and restore
|
||||
previously linked rows only from complete unchanged disconnected snapshots
|
||||
- ProjectDevice create, update, delete and global-to-project copy endpoints use
|
||||
these commands, require `expectedRevision` and return the new history state
|
||||
- revision metadata, change-set payloads and the project counter are committed
|
||||
in one SQLite transaction
|
||||
- a stale expected revision produces no history writes
|
||||
- integration coverage verifies sequential revisions, stale-command rejection
|
||||
and rollback after a forced late persistence failure
|
||||
|
||||
The current editor operations are not connected to this history boundary yet.
|
||||
Undo/redo therefore remains session-local until the remaining tasks are
|
||||
implemented.
|
||||
ProjectDevice CRUD on the project page is connected to this history boundary.
|
||||
The circuit-list editor and the remaining domain writes are not fully connected;
|
||||
its visible undo/redo therefore remains session-local until the remaining tasks
|
||||
are implemented.
|
||||
|
||||
Acceptance criteria:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user