-- ===================================================================== -- TeeCup — mobil (m/landsnummer) + verifisert e-postbytte på personlig -- profil (migrasjon 016) -- ===================================================================== -- Oppfølging av ADR-031 samme dag: brukeren påpekte at identifikatoren -- (e-post) og mobil manglet i profilen. Mobil er et rent, ekstra felt -- (samme mønster som player.mobile, men splittet i landsnummer+nummer -- slik brukeren ba om). E-post er derimot INNLOGGINGS-identifikatoren -- (magic-link-mål) -- kan ikke endres med en enkel PATCH uten å risikere -- kontokapring via en skrivefeil eller en kapret sesjon. Samme -- token-hash-og-utløp-mønster som magic_link_token (004), gjenbrukt for -- et NYTT formål: bekreft eierskap av den NYE adressen FØR den faktisk -- tas i bruk. -- ===================================================================== \set ON_ERROR_STOP on ALTER TABLE app_user ADD COLUMN mobile_country_code text; ALTER TABLE app_user ADD COLUMN mobile_number text; CREATE TABLE email_change_token ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), user_id uuid NOT NULL REFERENCES app_user(id) ON DELETE CASCADE, new_email citext NOT NULL, token_hash text NOT NULL UNIQUE, expires_at timestamptz NOT NULL, consumed_at timestamptz, created_at timestamptz NOT NULL DEFAULT now() ); CREATE INDEX ON email_change_token (user_id); GRANT SELECT, INSERT, UPDATE, DELETE ON email_change_token TO teecup_app;