teecup/056_scramble_solo_round.sql

46 lines
2.8 KiB
MySQL
Raw Normal View History

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