All checks were successful
Deploy Development / deploy (push) Successful in 40s
Test Suite / pytest-backend (push) Successful in 34s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 10s
Test Suite / playwright-tests (push) Successful in 54s
- Added backend support for Legal Hold with new endpoints to set and release holds on media assets. - Introduced new database columns for managing Legal Hold status and reasons. - Updated frontend to include UI elements for setting and releasing Legal Holds, including a confirmation dialog. - Enhanced Media Library page to display Legal Hold status and actions for superadmins. - Implemented comprehensive backend tests covering all aspects of Legal Hold functionality. - Updated documentation to reflect changes in the upload rights specification and interface models. - Bumped version to 0.8.84 and updated MediaLibraryPage version to 1.6.0.
74 lines
3.1 KiB
SQL
74 lines
3.1 KiB
SQL
-- Migration 051: P-11 Legal-Hold Lifecycle-Status
|
|
-- Sofortsperrung fuer rechtlich problematische Medien (Compliance-Paket P-11)
|
|
--
|
|
-- Architekturentscheidung:
|
|
-- rights_status='blocked' bleibt als Spiegel-Schnellstatus (P-06-Kompatibilitaet).
|
|
-- Primaere Wahrheit: legal_hold_active + dedizierte Metadaten-Felder in media_assets.
|
|
-- Dies ermoeglicht klare Trennung: P-06 Deklarationsstatus / P-11 Legal Hold / P-03 Lifecycle.
|
|
-- P-13 kann spaeter denselben set_legal_hold-Service nutzen.
|
|
|
|
ALTER TABLE media_assets
|
|
ADD COLUMN IF NOT EXISTS legal_hold_active BOOLEAN NOT NULL DEFAULT FALSE,
|
|
ADD COLUMN IF NOT EXISTS legal_hold_reason_code VARCHAR(50)
|
|
CHECK (legal_hold_reason_code IN (
|
|
'rights_dispute',
|
|
'consent_withdrawn',
|
|
'privacy_complaint',
|
|
'copyright_complaint',
|
|
'youth_protection',
|
|
'illegal_content',
|
|
'other'
|
|
)),
|
|
ADD COLUMN IF NOT EXISTS legal_hold_reason_note TEXT,
|
|
ADD COLUMN IF NOT EXISTS legal_hold_set_by_profile_id INT REFERENCES profiles(id) ON DELETE SET NULL,
|
|
ADD COLUMN IF NOT EXISTS legal_hold_set_at TIMESTAMPTZ,
|
|
ADD COLUMN IF NOT EXISTS legal_hold_released_by_profile_id INT REFERENCES profiles(id) ON DELETE SET NULL,
|
|
ADD COLUMN IF NOT EXISTS legal_hold_released_at TIMESTAMPTZ,
|
|
ADD COLUMN IF NOT EXISTS legal_hold_release_note TEXT;
|
|
|
|
COMMENT ON COLUMN media_assets.legal_hold_active IS
|
|
'P-11: TRUE = Medium unter Legal Hold; sofortige Sperrung fuer alle normalen Nutzerpfade. '
|
|
'Retention-Job darf dieses Medium nicht purgen. '
|
|
'rights_status wird bei Aktivierung auf ''blocked'' gespiegelt.';
|
|
|
|
COMMENT ON COLUMN media_assets.legal_hold_reason_code IS
|
|
'P-11: Kategorie des Legal Holds. Pflicht beim Setzen.';
|
|
|
|
COMMENT ON COLUMN media_assets.legal_hold_reason_note IS
|
|
'P-11: Freitext-Begruendung fuer den Legal Hold.';
|
|
|
|
COMMENT ON COLUMN media_assets.legal_hold_set_by_profile_id IS
|
|
'P-11: Profil das den Legal Hold gesetzt hat (Superadmin).';
|
|
|
|
COMMENT ON COLUMN media_assets.legal_hold_set_at IS
|
|
'P-11: Zeitpunkt der Legal-Hold-Aktivierung.';
|
|
|
|
COMMENT ON COLUMN media_assets.legal_hold_released_by_profile_id IS
|
|
'P-11: Profil das den Legal Hold aufgehoben hat.';
|
|
|
|
COMMENT ON COLUMN media_assets.legal_hold_released_at IS
|
|
'P-11: Zeitpunkt der Legal-Hold-Freigabe.';
|
|
|
|
COMMENT ON COLUMN media_assets.legal_hold_release_note IS
|
|
'P-11: Begruendung fuer die Aufhebung des Legal Holds.';
|
|
|
|
-- Index fuer Admin-Liste aktiver Legal Holds
|
|
CREATE INDEX IF NOT EXISTS idx_media_assets_legal_hold_active
|
|
ON media_assets (legal_hold_active)
|
|
WHERE legal_hold_active = TRUE;
|
|
|
|
-- Neue event_types fuer media_asset_audit_log
|
|
ALTER TABLE media_asset_audit_log
|
|
DROP CONSTRAINT IF EXISTS media_asset_audit_log_event_type_check;
|
|
|
|
ALTER TABLE media_asset_audit_log
|
|
ADD CONSTRAINT media_asset_audit_log_event_type_check
|
|
CHECK (event_type IN (
|
|
'visibility_change',
|
|
'copyright_change',
|
|
'metadata_change',
|
|
'lifecycle_change',
|
|
'legal_hold_set',
|
|
'legal_hold_released'
|
|
));
|