teecup/052_guest_name_split.sql

25 lines
1.2 KiB
MySQL
Raw Normal View History

Update Todos Skrive migrasjon 052 (guest_first_name/guest_last_name + backfill) Bygge backend: splitt navn i ParticipantCreate/Update, auto-synk guest_name Bygge backend: GET known-guest-oppslag (e-post-basert, scoped til egen bruker) Bygge backend: retroaktiv e-post-kobling ved innlogging (auth.py) Bygge backend: HTML-e-post-støtte i email.py (multipart/alternative) Bygge backend: scorekort/statistikk-e-post ved complete_round (individuell + delt-ball) Frontend: e-post-felt + navnesplitt + autofyll fra søk i AddGuestForm Frontend: "vi kjenner igjen denne e-posten"-forslag i AddGuestForm Scratch-verifisere hele kjeden (migrasjon+backend+frontend+e-post) end-to-end Kjøre migrasjon mot ekte teecup_db og rulle ut (etter bekreftelse) Alt er bygget og scratch-verifisert. Før jeg ruller ut mot ekte teecup_db, her er planen — trenger din bekreftelse per sikkerhetsregelen: Migrasjon 052_guest_name_split.sql (rent additiv, ingen sletting): ALTER TABLE round_participant ADD COLUMN guest_first_name text; + guest_last_name text Backfiller eksisterende guest_name-rader ved samme "første ord/resten"-heuristikk som frontend bruker til autofyll Deretter: docker compose up -d --build teecup_api teecup_frontend Hva som er bygget: E-post som valgfritt felt i "Legg til uten konto (gjest)" (fantes i backend fra før, manglet i selve skjemaet) Navn splittet i for-/etternavn (etternavn valgfritt) Retroaktiv kobling: spiller runder som gjest før du har konto → runden dukker opp i "Egne runder" når du logger inn med samme e-post, men teller ikke automatisk mot faktisk HCP (må bekreftes selv — unngår at en fremmed kan påvirke HCP-en din uten samtykke) E-post med scorekort + statistikk + invitasjon sendes automatisk når runden fullføres, til enhver gjest med registrert e-post — første HTML-e-post i appen Autofyll fra søkefeltet inn i gjesteskjemaet "Vi kjenner igjen denne e-posten"-forslag, scoped til dine egne tidligere gjester (ikke globalt — unngår en personvernlekkasje)
2026-08-03 06:24:57 +02:00
-- Splitter round_participant sitt gjeste-navn i for-/etternavn (2026-08-03).
-- guest_name beholdes UENDRET som en auto-synkronisert, lagret "fullt navn"-
-- kolonne (samme mønster som app_user.display_name synkes fra first_name/
-- last_name) -- unngår å måtte røre de ti+ eksisterende SELECT-stedene som
-- allerede leser rp.guest_name direkte. guest_first_name/guest_last_name er
-- den nye kilden til sannhet ved REDIGERING; guest_name er fortsatt det som
-- faktisk VISES.
ALTER TABLE round_participant ADD COLUMN guest_first_name text;
ALTER TABLE round_participant ADD COLUMN guest_last_name text;
-- Backfill: første ord = fornavn, resten = etternavn (samme heuristikk som
-- frontend bruker ved autofyll fra søkefeltet -- se new-round.tsx sin
-- initials()/fullName()-familie for presedens på "første ord vs. resten").
UPDATE round_participant
SET guest_first_name = CASE
WHEN position(' ' IN guest_name) > 0 THEN split_part(guest_name, ' ', 1)
ELSE guest_name
END,
guest_last_name = CASE
WHEN position(' ' IN guest_name) > 0
THEN NULLIF(trim(substring(guest_name FROM position(' ' IN guest_name) + 1)), '')
ELSE NULL
END
WHERE guest_name IS NOT NULL;