Files
adminandClaude Sonnet 5 d7f14c9feb Webapp-Vorlagen (Zwei-Ebenen-Modell, Nutzer-Entscheidung 09.09.2026)
Ergaenzung zum bisherigen rein kundeneigenen workspace_webapps: Admin
kann jetzt zusaetzlich global wiederverwendbare Vorlagen anlegen
('bereitstellen und zur Auswahl stellen'), Kunden aktivieren sie pro
Workspace zusaetzlich zu weiterhin frei erstellbaren eigenen
Eintraegen ('Kunden koennen selbst welche erstellen').

Neue Tabelle webapp_templates (Migration 0033, diesmal korrekt ueber
TUXFLOTTE_DATABASE_URL statt sudo-postgres angewendet - siehe Lehre aus
dem vorherigen Owner-Bug). workspace_webapps bekommt ein nullable
template_id (ON DELETE SET NULL) zur Aktivierungs-Nachverfolgung.

activate_webapp_template() kopiert Name/URL/Icon-Datei PHYSISCH unter
einem neuen, vom eigenen Eintrag abgeleiteten Dateinamen - keine
laufende Referenz auf die Vorlagen-Icon-Datei, sonst wuerde ein
spaeteres Loeschen/Aktualisieren der Vorlage die schon aktivierte Kopie
mit betreffen.

Neue Endpunkte: /api/v1/webapp-templates (CRUD),
/api/v1/workspaces/{id}/webapp-templates/available (noch nicht
aktivierte Vorlagen fuer einen Workspace), .../activate.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
2026-09-09 17:42:30 +02:00

30 lines
1.3 KiB
PL/PgSQL

BEGIN;
-- Zwei-Ebenen-Webapp-Modell (Nutzer-Entscheidung 09.09.2026, Ergänzung zum
-- bisherigen rein kundeneigenen workspace_webapps aus Migration 0032):
-- Admin kann global wiederverwendbare Vorlagen anlegen ("bereitstellen und
-- zur Auswahl stellen"), die Kunden pro Workspace aktivieren können -
-- zusätzlich zu weiterhin frei erstellbaren eigenen Einträgen.
CREATE TABLE webapp_templates (
id UUID PRIMARY KEY,
name TEXT NOT NULL,
url TEXT NOT NULL,
description TEXT,
icon_filename TEXT,
icon_content_type TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
-- Nullable, gesetzt wenn ein workspace_webapps-Eintrag durch Aktivieren
-- einer Vorlage entstanden ist (Name/URL/Icon werden beim Aktivieren
-- KOPIERT, nicht referenziert - eine spätere Vorlagenänderung wirkt sich
-- nicht rückwirkend auf schon aktivierte Einträge aus, analog zu
-- Bereitstellungsvorlagen-Snapshots an anderer Stelle im System).
-- ON DELETE SET NULL statt CASCADE: eine gelöschte Vorlage soll bereits
-- aktivierte Einträge nicht mitreißen, nur die Aktivierungs-Historie
-- kappen.
ALTER TABLE workspace_webapps ADD COLUMN template_id UUID REFERENCES webapp_templates(id) ON DELETE SET NULL;
COMMIT;