From eba8616438688451f4652541ef96626585a88887 Mon Sep 17 00:00:00 2001 From: Erol Haagenrud Date: Tue, 18 Aug 2026 06:53:35 +0200 Subject: [PATCH] Egen poi_type "creek" for bekk, skilt fra water (ADR-084 del 3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ny migrasjon 081 legger til creek i det delte course_poi_type-domenet. Kobler inn brukerens nye bekk-ikon i diagrammet og reklassifiserer de 8 kjente Tjøme-bekk-punktene (hull 2/3/11/12) fra water til creek, identifisert via samme koordinat-regneark som ga hazard_group-dataen i forrige runde. Co-Authored-By: Claude Sonnet 5 --- 081_course_poi_type_creek.sql | 33 ++++++++++++++ ARCHITECTURE_DECISIONS.md | 48 ++++++++++++++++++++ CHANGELOG.md | 33 ++++++++++++++ frontend/components/hole-diagram-view.tsx | 3 +- frontend/components/hole-target-distance.tsx | 7 +-- 5 files changed, 120 insertions(+), 4 deletions(-) create mode 100644 081_course_poi_type_creek.sql diff --git a/081_course_poi_type_creek.sql b/081_course_poi_type_creek.sql new file mode 100644 index 0000000..1302756 --- /dev/null +++ b/081_course_poi_type_creek.sql @@ -0,0 +1,33 @@ +-- ===================================================================== +-- TeeCup — migrasjon 081 +-- Ny POI-type "creek" (bekk) -- skilt fra "water" (dam/vannhinder) +-- ===================================================================== +-- Konkret anledning (ADR-084 del 2): Tjøme Golfklubb sitt koordinat- +-- regneark skiller eksplisitt mellom "vann" (dam) og "fairway bekk" +-- (bekk/creek) som to ulike fysiske hindringstyper -- 8 punkter (4 +-- forkant+bakkant-par, hull 2/3/11/12) er i dag lagret som poi_type +-- 'water' siden domenet (migrasjon 079) ikke hadde noen egen verdi for +-- bekk. Bruker har laget og lastet opp et eget bekk-ikon +-- (frontend/public/hole-diagram/hazard-creek.png) og ba eksplisitt om +-- at dette blir en visuelt distinkt hindringstype i hull-diagrammet, +-- ikke fortsatt vist som "Vannhinder". +-- +-- `creek` legges til course_poi_type-domenet (migrasjon 079) -- gjelder +-- automatisk begge koordinattabellene (golfapi_course_coordinate og +-- teeoff_course_coordinate) siden begge bruker samme delte domene. +-- De 8 kjente eksisterende bekk-punktene REKLASSIFISERES i en egen, +-- ikke-migrasjonsbasert UPDATE (se CHANGELOG/ADR-084) -- identifisert +-- presist via samme koordinat-regneark som ga hazard_group-dataen i +-- del 2, ikke en heuristikk. +-- ===================================================================== + +\set ON_ERROR_STOP on + +ALTER DOMAIN course_poi_type DROP CONSTRAINT course_poi_type_check; +ALTER DOMAIN course_poi_type ADD CONSTRAINT course_poi_type_check + CHECK (VALUE IN ( + 'green', 'green_bunker', 'fairway_bunker', 'water', 'creek', + 'trees', 'marker_100', 'marker_150', 'marker_200', + 'dogleg', 'road', 'tee_front', 'tee_back', + 'rock', 'layup', 'landmark' + )); diff --git a/ARCHITECTURE_DECISIONS.md b/ARCHITECTURE_DECISIONS.md index 231e62e..d6e4aca 100644 --- a/ARCHITECTURE_DECISIONS.md +++ b/ARCHITECTURE_DECISIONS.md @@ -8546,6 +8546,54 @@ eget ikon oppdatert: nå KUN `road` (ingen ikon lastet opp for denne). V0-prompt for polert visning fortsatt ikke skrevet -- venter på at bruker har sett/godkjent denne runden i produksjon også. +### ADR-084 del 3: egen poi_type "creek" for bekk (2026-08-18) + +Del 2 sa bevisst nei til å blande bekk inn i `water` sitt ikon -- +bruker ba om egen runde, som ble gjort samme dag. `course_poi_type` +(delt domene, migrasjon 079) hadde ingen verdi for bekk, kun `water` +som historisk har dekket både dam og bekk. + +**Migrasjon 081** legger til `creek` i domenet (`ALTER DOMAIN +course_poi_type DROP/ADD CONSTRAINT`) -- gjelder automatisk begge +koordinattabellene siden de deler domenet. Additiv, ingen eksisterende +rader berøres av selve migrasjonen. + +**Reklassifisering, egen UPDATE (ikke migrasjon):** 8 kjente Tjøme- +punkter (hull 2/3/11/12, "fairway bekk" i koordinat-regnearket fra del +2, gjenbruker samme fysiske bekk på to hull-par) hadde `poi_type = +'water'` siden det var eneste tilgjengelige verdi ved import. +Identifisert presist via samme regneark+lat/long-matching som ga +hazard_group-dataen i del 2 (ikke gjettet) -- alle 8 hadde allerede +`hazard_group` satt fra den runden, urørt av denne oppdateringen. + +Frontend: nytt ikon (`hazard-creek.png`, 32×32, lastet opp av bruker) +koblet inn som egen `HazardKind` i `_HAZARD_KIND`/`_ICON_SRC`, label +"Bekk". Ingen backend-modellendring nødvendig -- `poi_type` er +allerede `str` (ikke et strengt enum) i både `TargetPoint` +(target_points.py) og `CoursePointIn/Out` (courses.py). + +**Verifisert:** `tsc --noEmit` rent, `vitest run` 55/55, full +`./scripts/run_backend_tests.sh` 111/111 (migrasjon 081 kjørt +problemfritt i scratch-testsuiten sin egen database). Ny scratch-runde +med et konstruert bekk-forkant+bakkant-par -- bekreftet eget, +distinkt ikon (ikke forvekslet med vann-ikonet), riktig forkant/ +bakkant-tekst, lys+mørk. Scratch-stacken revet ned. + +Under samme opprydding oppdaget: flere gamle, TOMME MinIO scratch- +bøtter fra tidligere økter (`teecup-scratch-hh/hs/oom/players/roster/ +wz`) som aldri ble ryddet bort ved forrige økters teardown. Bekreftet +adskilt fra ekte data (produksjon bruker `teecup-media`, +`TEECUP_MINIO_BUCKET` i `.env`) og tomme (0 objekter hver) før sletting +-- ingen tilsvarende glemte scratch-databaser/-roller/-containere +funnet. + +**Rullet ut 2026-08-18** -- bruker bekreftet alle tre deler eksplisitt +(migrasjon, reklassifisering, kode). Migrasjon 081 og +reklassiferings-UPDATE kjørt mot ekte `teecup_db`, deretter `docker +compose build teecup_frontend && up -d`. Rene containerlogger, +`https://teecup.golf/logg-inn` 200 OK, 8/8 rader bekreftet +`poi_type = 'creek'`. + --- ## Utviklingsplan (rekkefølge) diff --git a/CHANGELOG.md b/CHANGELOG.md index e96c7b2..252bf18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12180,3 +12180,36 @@ Neste steg: **Gjenstår:** bekk som egen `poi_type` (egen runde, bedt om eksplisitt av bruker). Ikon-mangel-lista er nå kun `road`. V0- prompt for polert visning fortsatt ikke skrevet. + +103. **Egen poi_type "creek" for bekk (ADR-084 del 3) — 2026-08-18.** + Del 2 samme dag lot bekk-ikonet ligge ukoblet -- domenet + `course_poi_type` skilte ikke bekk fra dam (begge `water`), og + bruker ba om egen runde for det. Migrasjon 081 la til `creek` i + det delte domenet (`ALTER DOMAIN ... DROP/ADD CONSTRAINT`, gjelder + automatisk begge koordinattabellene). Egen `UPDATE` (ikke + migrasjon) reklassifiserte de 8 kjente Tjøme-bekk-punktene (hull + 2/3/11/12) fra `water` til `creek` -- identifisert presist via + samme koordinat-regneark+lat/long-matching som ga hazard_group- + dataen i del 2, `hazard_group` urørt. Nytt ikon + (`hazard-creek.png`) koblet inn i `_HAZARD_KIND`/`_ICON_SRC` under + egen `HazardKind`, label "Bekk". Ingen backend-endring nødvendig + (`poi_type` er `str`, ikke et strengt enum, i både + `target_points.py` og `courses.py`). + + **Verifisert:** `tsc --noEmit` rent, `vitest run` 55/55, full + `./scripts/run_backend_tests.sh` 111/111 (migrasjon 081 i scratch- + testsuitens egen database). Ny scratch-runde med konstruert bekk- + par -- bekreftet eget, distinkt ikon (ikke forvekslet med vann), + lys+mørk. Scratch-stacken revet ned. + + Samtidig ryddet: flere gamle, TOMME MinIO scratch-bøtter fra + tidligere økter (`teecup-scratch-hh/hs/oom/players/roster/wz`) som + aldri ble fjernet ved forrige teardown -- bekreftet adskilt fra + ekte data (`teecup-media`) og tomme før sletting, ingen andre + glemte scratch-ressurser funnet. + + **Rullet ut 2026-08-18** -- bruker bekreftet migrasjon, + reklassifisering og kode hver for seg. Kjørt mot ekte `teecup_db`, + deretter `docker compose build teecup_frontend && up -d`. Rene + containerlogger, `https://teecup.golf/logg-inn` 200 OK, 8/8 rader + bekreftet `poi_type = 'creek'`. diff --git a/frontend/components/hole-diagram-view.tsx b/frontend/components/hole-diagram-view.tsx index 26f268a..c074e5a 100644 --- a/frontend/components/hole-diagram-view.tsx +++ b/frontend/components/hole-diagram-view.tsx @@ -12,7 +12,7 @@ import { MapPin, TriangleAlert } from "lucide-react" import { cn } from "@/lib/utils" -export type HazardKind = "sand" | "water" | "rock" | "tree" | "dogleg" | "layup" | "landmark" | "generic" +export type HazardKind = "sand" | "water" | "creek" | "rock" | "tree" | "dogleg" | "layup" | "landmark" | "generic" export type DiagramHazard = { key: string @@ -99,6 +99,7 @@ function formatMeters(m: number) { const _ICON_SRC: Partial> = { sand: "/hole-diagram/hazard-sand.png", water: "/hole-diagram/hazard-water.png", + creek: "/hole-diagram/hazard-creek.png", rock: "/hole-diagram/hazard-rock.png", tree: "/hole-diagram/hazard-tree.png", dogleg: "/hole-diagram/hazard-dogleg.png", diff --git a/frontend/components/hole-target-distance.tsx b/frontend/components/hole-target-distance.tsx index 0af53b4..6c39d82 100644 --- a/frontend/components/hole-target-distance.tsx +++ b/frontend/components/hole-target-distance.tsx @@ -53,6 +53,7 @@ const _HAZARD_LABELS: Record = { green_bunker: "Bunker (green)", fairway_bunker: "Bunker (fairway)", water: "Vannhinder", + creek: "Bekk", rock: "Fjellknaus", trees: "Trær", dogleg: "Dogleg", @@ -61,14 +62,14 @@ const _HAZARD_LABELS: Record = { } // ADR-084: hvilket ikon en hindringstype får i diagrammet. "generic" -// (typer uten dedikert ikon -- i dag ingen, `road` ville falt hit hvis -// den noen gang klassifiseres som hindring) faller tilbake til lucide +// (typer uten dedikert ikon -- i dag `road`) faller tilbake til lucide // sin TriangleAlert -- se hole-diagram-view.tsx. -type HazardKind = "sand" | "water" | "rock" | "tree" | "dogleg" | "layup" | "landmark" | "generic" +type HazardKind = "sand" | "water" | "creek" | "rock" | "tree" | "dogleg" | "layup" | "landmark" | "generic" const _HAZARD_KIND: Record = { green_bunker: "sand", fairway_bunker: "sand", water: "water", + creek: "creek", rock: "rock", trees: "tree", dogleg: "dogleg",