Fullført: TeeCup-beskrivelse for logo — levert tidligere. Migrasjon 056 (scramble_solo) — kjørt og live. Matchspill-varianten (scramble_solo_match, migrasjon 057) — bygget, verifisert, live. Kritisk bug funnet og rettet: lagspillere kunne ikke registrere score i det hele tatt for scramble_solo-formatene (evig spinner, ingen feilmelding) — var allerede live og ødelagt for ekte lagspillere. Rettet for begge varianter, rullet ut. "Bruk som mal for egen bane" — vises nå kun i "Opprett ny bane"-flyten (ny lenke "Basér på en eksisterende bane i stedet"), ikke i det vanlige søket. Alt er rullet ut live på teecup.golf, verifisert i nettleser mot isolerte scratch-miljøer (ryddet opp etterpå), og dokumentert i CHANGELOG.md (punkt 22–24) og FEATURE_BACKLOG.md.
45 lines
2.8 KiB
SQL
45 lines
2.8 KiB
SQL
-- =====================================================================
|
|
-- TeeCup — Scramble mot enkeltspiller, slagspill-varianten (frittstående
|
|
-- runder), migrasjon 056.
|
|
--
|
|
-- Første ASYMMETRISKE to-siders-format i prosjektet: et scramble-lag
|
|
-- (variabel størrelse, N>=2, delt ball) spiller netto slagspill mot ÉN
|
|
-- individuell spiller (egen ball) -- laveste nettosum vinner. Bevisst
|
|
-- utenfor omfang: match-play-varianten (egen runde senere), org-
|
|
-- lagturneringer (kun frittstående runder nå).
|
|
--
|
|
-- Lagets Playing Handicap = enkelt gjennomsnitt av medlemmenes course
|
|
-- handicap (handicap_engine.py sin nye TeamAverage) -- bevisst uavhengig
|
|
-- av scramble_2/scramble_4 sine faste RankedSplit-tabeller, som
|
|
-- forutsetter fast lagstørrelse. Ingen av de tre HCP-PDF-ene (se
|
|
-- CLAUDE.md) dekker lag-vs-individuell eller vilkårlig lagstørrelse --
|
|
-- dette er en bevisst ny, enkel TeeCup-regel, bekreftet med bruker
|
|
-- 2026-08-05, ikke en kildebelagt formel.
|
|
-- =====================================================================
|
|
\set ON_ERROR_STOP on
|
|
|
|
ALTER TABLE round DROP CONSTRAINT round_play_format_check;
|
|
ALTER TABLE round ADD CONSTRAINT round_play_format_check
|
|
CHECK (play_format IN ('stroke', 'match', 'skins', 'fourball', 'foursome', 'greensome', 'scramble_2', 'scramble_4', 'stableford', 'chapman', 'copenhagen', 'bbb', 'flag', 'shamble', 'money_ball', 'high_low_high', 'scramble_solo'));
|
|
|
|
-- Individualspillerens konfigurerbare allowance-%, arrangør-satt per
|
|
-- runde, standard 100. Bespoke kolonne (samme mønster som bbb_sweep_
|
|
-- bonus_enabled/shamble_best_n) -- IKKE den generiske allowance_override-
|
|
-- JSON-en (migrasjon 051), som forutsetter ÉN delt strategi for hele
|
|
-- runden. Dette formatet trenger to UAVHENGIGE strategier: lagsiden har
|
|
-- ingen konfig i det hele tatt (alltid rent snitt via TeamAverage),
|
|
-- individualsiden har nøyaktig denne ene justerbare prosenten.
|
|
ALTER TABLE round ADD COLUMN scramble_solo_individual_pct smallint NOT NULL DEFAULT 100
|
|
CHECK (scramble_solo_individual_pct BETWEEN 0 AND 100);
|
|
|
|
-- Side-rolle-disambiguering. Nullable, meningsløs/NULL for alle andre
|
|
-- formater. round_side kan slettes/gjenopprettes fritt (delete_round_
|
|
-- side) uten garantert stabil opprettelsesrekkefølge -- rekkefølge-basert
|
|
-- "side 1 = lag, side 2 = individuell" er derfor IKKE pålitelig identitet.
|
|
-- round_side_id IS NULL for individualspilleren ville dessuten brutt
|
|
-- eksisterende "er denne deltakeren med i matchen"-sjekker
|
|
-- (_two_sided_hole_results m.fl.), som bruker nettopp round_side_id IS
|
|
-- NOT NULL som signal -- individualspilleren får derfor en ekte
|
|
-- round_side-rad (rollen 'individual'), ikke NULL.
|
|
ALTER TABLE round_side ADD COLUMN side_role text CHECK (side_role IN ('team', 'individual'));
|
|
CREATE UNIQUE INDEX round_side_role_unique ON round_side (round_id, side_role) WHERE side_role IS NOT NULL;
|