Some checks failed
Deploy Development / deploy (push) Successful in 46s
Test Suite / pytest-backend (push) Failing after 2s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 7s
Test Suite / playwright-tests (push) Successful in 50s
DB 047: legal_documents (versioniert, draft/published/archived) +
legal_document_audit (Änderungslog); Partial-Unique-Index garantiert
max. ein published-Dokument pro document_type.
Backend: GET /api/legal-documents/{type}/published (kein Auth);
Superadmin-CRUD + Publish/Archive + Audit unter /api/admin/legal-documents.
Frontend: LegalPage lädt aus API mit Platzhalter-Fallback;
AdminLegalDocumentsPage (/admin/legal-documents) mit Tab-Navigation,
Versionsliste, Entwurf-Editor, Publish/Archive-Workflow, Änderungslog.
AdminPageNav: Link „Rechtstexte" ergänzt.
version: 0.8.71 (backend + frontend)
module: legal_documents 1.0.0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
38 lines
1.9 KiB
SQL
38 lines
1.9 KiB
SQL
-- Migration 047: Admin-konfigurierbare Rechtstexte
|
|
-- Tabellen: legal_documents (versioniert), legal_document_audit (Änderungslog)
|
|
-- document_type: impressum | privacy_policy | terms_of_use | media_policy
|
|
-- status: draft | published | archived
|
|
-- Partial unique index: nur genau ein published-Dokument pro document_type erlaubt.
|
|
|
|
CREATE TABLE IF NOT EXISTS legal_documents (
|
|
id SERIAL PRIMARY KEY,
|
|
document_type VARCHAR(50) NOT NULL
|
|
CHECK (document_type IN ('impressum', 'privacy_policy', 'terms_of_use', 'media_policy')),
|
|
version INT NOT NULL DEFAULT 1,
|
|
title VARCHAR(255) NOT NULL,
|
|
content_sections JSONB NOT NULL DEFAULT '[]',
|
|
status VARCHAR(20) NOT NULL DEFAULT 'draft'
|
|
CHECK (status IN ('draft', 'published', 'archived')),
|
|
change_note TEXT,
|
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
updated_at TIMESTAMP DEFAULT NOW(),
|
|
created_by_profile_id INT REFERENCES profiles(id) ON DELETE SET NULL,
|
|
published_by_profile_id INT REFERENCES profiles(id) ON DELETE SET NULL,
|
|
published_at TIMESTAMP
|
|
);
|
|
|
|
-- Sicherstellt: pro document_type maximal ein published-Datensatz
|
|
CREATE UNIQUE INDEX IF NOT EXISTS legal_documents_unique_published
|
|
ON legal_documents (document_type)
|
|
WHERE status = 'published';
|
|
|
|
CREATE TABLE IF NOT EXISTS legal_document_audit (
|
|
id SERIAL PRIMARY KEY,
|
|
legal_document_id INT NOT NULL REFERENCES legal_documents(id) ON DELETE CASCADE,
|
|
action VARCHAR(50) NOT NULL,
|
|
changed_by_profile_id INT REFERENCES profiles(id) ON DELETE SET NULL,
|
|
change_note TEXT,
|
|
previous_status VARCHAR(20),
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|
);
|