- Migration 0038: gruppen.workspace_id (nullable FK), device_merkmale
Tabelle entfernt (keine Datenzeilen auf anode, geprüft vor Drop).
- set_gruppe_workspace()/clear_gruppe_workspace(): weist einer
Gerätegruppe einen alternativen Workspace zu, ersetzt die komplette
Baseline für Mitgliedsgeräte statt nur einzelner Merkmale. Prüft
Organisationszugehörigkeit des Workspace (global oder eigene Org) und
die Exklusivitätsregel (ein Gerät nur in einer workspace-tragenden
Gruppe gleichzeitig) - sowohl beim Zuweisen als auch beim Hinzufügen
eines Geräts zu einer bereits workspace-tragenden Gruppe.
- resolve_effective_workspace_id(): neue Auflösungsstufe zwischen
Bereitstellungsvorlage und OE-/Gruppen-Merkmal-Overrides.
- fetch_auftragskatalog_state()/_listing(): device_merkmale-Override-Ebene
entfernt (gewann bisher immer), select_auftrag/deselect_auftrag-
Endpunkte + set_auftrag_selection() entfernt. get_device_auftragskatalog
bleibt als reine Ist-Zustand-Anzeige.
- Neuer Endpunkt GET /api/v1/organizations/{id}/workspaces (global +
eigene, org-gefiltert - fetch_workspaces() bleibt admin-only, würde
sonst fremde private Workspaces preisgeben).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
36 lines
1.8 KiB
PL/PgSQL
36 lines
1.8 KiB
PL/PgSQL
BEGIN;
|
|
|
|
-- Design-Runde 10.09.2026 (Workspace-Creator, siehe
|
|
-- project_phase2_app_store_merkmale-Memory / roadmap-Update): Gerätegruppen
|
|
-- können ab jetzt optional einen alternativen Workspace tragen - ersetzt
|
|
-- für Mitgliedsgeräte die komplette Workspace-Baseline (Grundbestand an
|
|
-- Merkmalen), nicht nur einzelne Merkmal-Overrides (dafür bleibt
|
|
-- gruppen_merkmale weiterhin zuständig). Gleiches Distro-Backend wie am
|
|
-- Installationstag bleibt Voraussetzung (kein Reinstall-Mechanismus) -
|
|
-- wird nicht hart erzwungen, sondern läuft über die bestehende
|
|
-- Blueprint-Zuordnung natürlich leer: ein Merkmal ohne Blueprint für das
|
|
-- Geräte-Backend fällt einfach aus dem Katalog raus (INNER JOIN in
|
|
-- fetch_auftragskatalog_state/listing), kein Hard-Error - gleiches
|
|
-- Verhalten wie bei jeder anderen Backend-Lücke im Katalog.
|
|
--
|
|
-- Exklusivität (ein Gerät kann nur in einer workspace-tragenden
|
|
-- Gerätegruppe gleichzeitig sein) wird NICHT per DB-Constraint erzwungen
|
|
-- (M:N über device_gruppen lässt sich das nicht sauber als CHECK
|
|
-- ausdrücken), sondern application-seitig in app.py
|
|
-- (set_gruppe_workspace()/add_device_to_gruppe()).
|
|
ALTER TABLE gruppen ADD COLUMN workspace_id UUID
|
|
REFERENCES workspaces(id)
|
|
ON DELETE SET NULL;
|
|
|
|
-- device_merkmale-Ablösung (Entscheidung 09./10.09.2026, siehe Plan-Datei
|
|
-- zur Architektur-Diskussion): Einzelgerät-Overrides sind ab jetzt
|
|
-- Ein-Geräte-Gruppen - dieselbe OE-/Gruppen-Zwischenschicht wie jede
|
|
-- andere Gruppe, statt einer eigenen, immer gewinnenden Override-Ebene.
|
|
-- Vor dieser Migration auf anode geprüft: device_merkmale hatte keine
|
|
-- Datenzeilen, kein Migrationsschritt für Bestandsdaten nötig.
|
|
-- device_merkmal_events bleibt unberührt (allgemeines Audit-Log, referenziert
|
|
-- device_id/merkmal_id direkt, nicht device_merkmale).
|
|
DROP TABLE device_merkmale;
|
|
|
|
COMMIT;
|