diff --git a/ARCHITECTURE_DECISIONS.md b/ARCHITECTURE_DECISIONS.md index 358f306..95d928c 100644 --- a/ARCHITECTURE_DECISIONS.md +++ b/ARCHITECTURE_DECISIONS.md @@ -660,6 +660,13 @@ db/RLS-avhengighet — samme isolasjonsprinsipp som `handicap_engine.py`). `POST .../courses/official-import`. Migrasjon `010_official_course_unique_ ref.sql`. +**Tillegg 2026-08-03 (research, ikke bygget):** samme import-ved-eksplisitt- +valg-prinsipp er identifisert som riktig mal for en fremtidig internasjonal +banekilde (golfapi.io, for baner utenfor Norge/`teeoff_db`s dekning) — en +tredje `course.source`-verdi + `app/golfapi_client.py` ved siden av +`app/teeoff_client.py`, ikke en ny arkitektur. Ingen ADR-runde startet ennå, +kun notert. Full detalj i FEATURE_BACKLOG.md, «Internasjonale baner». + --- ## ADR-020 — Invitasjonskode (oppdagelse), matchledelse og projisert stilling diff --git a/FEATURE_BACKLOG.md b/FEATURE_BACKLOG.md index 0902094..edee380 100644 --- a/FEATURE_BACKLOG.md +++ b/FEATURE_BACKLOG.md @@ -2130,6 +2130,65 @@ sammenslåing eller rekkefølge-endring i en senere runde. --- +### Internasjonale baner (utenfor Norge) — 📋 NOTERT, IKKE designet/bygget (research 2026-08-03) + +Brukeren undersøkte (i en ekstern Gemini-samtale, ikke denne økten — notert +her for å fange retningen før den glemmes, samme rutine som Order of +Merit-notatet over) hvordan TeeCup kan støtte baner utenfor Norge, siden +`teeoff_db` (ADR-004/ADR-019) kun dekker norske baner. Ingen kode skrevet, +ingen ADR-runde startet ennå — dette er et fremtidig, ikke-akutt behov, +relevant når/hvis TeeCup faktisk kommersialiseres og får brukere utenfor +Norge (se `teecup.golf`-domeneplanen, kjøpt med sikte på at TeeCup etter +hvert flytter dit fra `teecup.teeoff.no`). + +**Valgt dataleverandør: Golf API (golfapi.io)** — ~42 000 baner globalt, +tilbyr BÅDE et REST-API og en fullstendig CSV-database-eksport +(`clubs.csv`/`courses.csv`/`tees.csv`/`coordinates.csv`). Andre vurderte +og forkastet: iGolf (40 000+, men B2B/enterprise-dyrt), GolfCourseAPI +(~30 000, gratisnivå men mer begrenset), Golf Intelligence (fokusert på +simulatorer/3D, feil målgruppe). + +**Anbefalt tilnærming: Live API + egen caching, IKKE CSV-database-kjøp +foreløpig.** Dette er strukturelt identisk med mønsteret ADR-019 allerede +etablerte for teeoff-import (`source='official'` + `external_course_ref`, +kopiér-ved-eksplisitt-valg i stedet for live oppslag ved hver bruk) — samme +"importer én gang, lagre lokalt, aldri avhengig av en ekstern tjenestes +oppetid ved handicap-beregning"-prinsipp, bare med en ny ekstern kilde i +tillegg til teeoff. Golfapi.io sin avtale tillater eksplisitt caching +("you can store/cache the fetched course data... no need to call the API +to fetch the same course multiple times") — så en tredje `course.source`- +verdi (f.eks. `'international'`, mønster fra `'official'`) med et eget +`app/golfapi_client.py` (samme isolasjonsprinsipp som `app/teeoff_client.py`) +er den naturlige videreføringen NÅR dette designes, ikke en ny arkitektur. +CSV-database-kjøpet (3 995-5 995 € for alle baner, avhengig av om +koordinater inkluderes) er en betydelig forhåndskostnad som er unødvendig +så lenge caching-tilnærmingen dekker behovet organisk (bruker søker opp en +bane → 1 API-kall → lagres lokalt for alltid). + +**Prisplan hos golfapi.io** (hentet 2026-08-03, kan være utdatert ved +faktisk bygging — bekreft på nytt): API-kall/måned: 50→29€, 500→99€, +2000→199€, 4000→299€, ubegrenset→399€ (krever årsabonnement). Et +engangskjøp på 500 tidsubegrensede kall finnes for 199€ (ingen løpende +kostnad, egnet for en beta-fase med få brukere). 15 dagers gratis prøve. +CSV-eksport (hvis man likevel velger det senere): «All courses» 3 995€ +uten koordinater/5 995€ med, «Europa»/«USA»/«Asia-Pacific+Africa» hver +1 995€/2 995€. CSV gir 6 måneders oppdateringstilgang, deretter 20% av +opprinnelig pris per år for videre oppdateringer. + +**Bevisst utsatt, naturlig neste steg NÅR dette skal bygges:** en liten +ADR (samme mønster som ADR-019) som dekker (1) ny `course.source`-verdi + +migrasjon, (2) `app/golfapi_client.py` sitt kontraktsformat + enhets- +konvertering (advarsel fra research: amerikanske kilder returnerer ofte +yards, må konverteres til meter FØR lagring — `hole`/`tee_rating`- +tabellene har ingen enhets-diskriminator i dag), (3) hvordan bane-søket i +frontend (samme to-felts-forvirring som teeoff-søket over, se det åpne +punktet rett over) skal skille "søk norske baner (teeoff)" fra "søk +internasjonale baner (golfapi.io)" — trolig ett samlet søkefelt med +landkode-basert ruting internt, ikke to synlige knapper. Ikke noe hastverk +— ingen brukere utenfor Norge ennå. + +--- + ## Invitasjonskode, ledende side og projisert stilling — ADR-020 Reist av brukeren 2026-07-19, rett etter at kamp-play-flyten var komplett.