teecup/052_guest_name_split.sql
Erol Haagenrud d395f86753 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

24 lines
1.2 KiB
SQL

-- 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;