Files
provisioning-server/migrations/0038_geraetegruppen_workspace.sql
T
adminandClaude Sonnet 5 10d31f8cf3 Gerätegruppen mit alternativem Workspace, device_merkmale abgelöst
- 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
2026-09-10 10:43:34 +02:00

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;