BEGIN; -- Vereinfachte Personalisierung (ADR-0041, Ergänzung 24.10.2026): Der -- Kunden-Admin trägt die Adresse des Benutzers beim Gerät ein, der Benutzer -- wählt Anmeldename und Passwort über einen Mail-Link. Kein Aktivierungscode -- und keine eigene Bestätigung mehr; der Link belegt den Besitz der Adresse. -- -- Neuer Ablauf der Stände: -- eingeladen -> bestaetigt -> angelegt -- Der Link nutzt bestaetigung_token_hash/bestaetigung_bis (7 Tage). Die -- Adresse bleibt beim Verfall erhalten: Sie stammt vom Kunden-Admin, nicht -- von einer unbestätigten Eingabe. ALTER TABLE personalisierungen DROP CONSTRAINT personalisierungen_status_check; ALTER TABLE personalisierungen ADD CONSTRAINT personalisierungen_status_check CHECK (status IN ( 'eingeladen', 'code_offen', 'eingereicht', 'bestaetigt', 'angelegt', 'zurueckgezogen', 'verfallen', 'fehlgeschlagen', 'beendet' )); ALTER TABLE personalisierungen ALTER COLUMN code_hash DROP NOT NULL; ALTER TABLE personalisierungen ALTER COLUMN code_gueltig_bis DROP NOT NULL; -- Laufende Vorgänge aus dem Code-Weg gibt es nach dem Umbau nicht mehr. UPDATE personalisierungen SET status = 'zurueckgezogen', passwort_hash = NULL, bestaetigung_token_hash = NULL WHERE status IN ('code_offen', 'eingereicht'); DROP INDEX personalisierungen_ein_offener_je_geraet; CREATE UNIQUE INDEX personalisierungen_ein_offener_je_geraet ON personalisierungen (device_id) WHERE status IN ('eingeladen', 'code_offen', 'eingereicht', 'bestaetigt'); COMMIT;