Egen poi_type "creek" for bekk, skilt fra water (ADR-084 del 3)
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 <noreply@anthropic.com>
This commit is contained in:
parent
f3b3d30e4e
commit
eba8616438
5 changed files with 120 additions and 4 deletions
33
081_course_poi_type_creek.sql
Normal file
33
081_course_poi_type_creek.sql
Normal file
|
|
@ -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'
|
||||||
|
));
|
||||||
|
|
@ -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
|
V0-prompt for polert visning fortsatt ikke skrevet -- venter på at
|
||||||
bruker har sett/godkjent denne runden i produksjon også.
|
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)
|
## Utviklingsplan (rekkefølge)
|
||||||
|
|
|
||||||
33
CHANGELOG.md
33
CHANGELOG.md
|
|
@ -12180,3 +12180,36 @@ Neste steg:
|
||||||
**Gjenstår:** bekk som egen `poi_type` (egen runde, bedt om
|
**Gjenstår:** bekk som egen `poi_type` (egen runde, bedt om
|
||||||
eksplisitt av bruker). Ikon-mangel-lista er nå kun `road`. V0-
|
eksplisitt av bruker). Ikon-mangel-lista er nå kun `road`. V0-
|
||||||
prompt for polert visning fortsatt ikke skrevet.
|
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'`.
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
import { MapPin, TriangleAlert } from "lucide-react"
|
import { MapPin, TriangleAlert } from "lucide-react"
|
||||||
import { cn } from "@/lib/utils"
|
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 = {
|
export type DiagramHazard = {
|
||||||
key: string
|
key: string
|
||||||
|
|
@ -99,6 +99,7 @@ function formatMeters(m: number) {
|
||||||
const _ICON_SRC: Partial<Record<HazardKind, string>> = {
|
const _ICON_SRC: Partial<Record<HazardKind, string>> = {
|
||||||
sand: "/hole-diagram/hazard-sand.png",
|
sand: "/hole-diagram/hazard-sand.png",
|
||||||
water: "/hole-diagram/hazard-water.png",
|
water: "/hole-diagram/hazard-water.png",
|
||||||
|
creek: "/hole-diagram/hazard-creek.png",
|
||||||
rock: "/hole-diagram/hazard-rock.png",
|
rock: "/hole-diagram/hazard-rock.png",
|
||||||
tree: "/hole-diagram/hazard-tree.png",
|
tree: "/hole-diagram/hazard-tree.png",
|
||||||
dogleg: "/hole-diagram/hazard-dogleg.png",
|
dogleg: "/hole-diagram/hazard-dogleg.png",
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ const _HAZARD_LABELS: Record<string, string> = {
|
||||||
green_bunker: "Bunker (green)",
|
green_bunker: "Bunker (green)",
|
||||||
fairway_bunker: "Bunker (fairway)",
|
fairway_bunker: "Bunker (fairway)",
|
||||||
water: "Vannhinder",
|
water: "Vannhinder",
|
||||||
|
creek: "Bekk",
|
||||||
rock: "Fjellknaus",
|
rock: "Fjellknaus",
|
||||||
trees: "Trær",
|
trees: "Trær",
|
||||||
dogleg: "Dogleg",
|
dogleg: "Dogleg",
|
||||||
|
|
@ -61,14 +62,14 @@ const _HAZARD_LABELS: Record<string, string> = {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ADR-084: hvilket ikon en hindringstype får i diagrammet. "generic"
|
// ADR-084: hvilket ikon en hindringstype får i diagrammet. "generic"
|
||||||
// (typer uten dedikert ikon -- i dag ingen, `road` ville falt hit hvis
|
// (typer uten dedikert ikon -- i dag `road`) faller tilbake til lucide
|
||||||
// den noen gang klassifiseres som hindring) faller tilbake til lucide
|
|
||||||
// sin TriangleAlert -- se hole-diagram-view.tsx.
|
// 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<string, HazardKind> = {
|
const _HAZARD_KIND: Record<string, HazardKind> = {
|
||||||
green_bunker: "sand",
|
green_bunker: "sand",
|
||||||
fairway_bunker: "sand",
|
fairway_bunker: "sand",
|
||||||
water: "water",
|
water: "water",
|
||||||
|
creek: "creek",
|
||||||
rock: "rock",
|
rock: "rock",
|
||||||
trees: "tree",
|
trees: "tree",
|
||||||
dogleg: "dogleg",
|
dogleg: "dogleg",
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue