Gjør romnr til autoritativ tilfluktsrom-ID (Room-PK og IndexedDB-key)
Produktbeslutning (Forgejo #15): romnr — DSBs romnummer — er den autoritative IDen. lokalId regenereres av Geonorge ved hver eksport og beholdes bare som informasjonsfelt; det skal aldri sammenlignes eller nøkles på. Utredningen mot Geonorge/DSB droppes. Dette retter også en reell feil på Android: etter «Oppdater data» holdt selectedShelter det gamle objektet med utdatert lokalId, så rebuildShelterList() la til en duplikatrad med «utenfor nærområdet»- badge for et rom som var blant de nærmeste, og markørhøylysingen mistet målet (markørkartet var nøklet på nye lokalId-er). Android: - Shelter: @PrimaryKey romnr; lokalId vanlig kolonne - ShelterDatabase: versjon 2 + fallbackToDestructiveMigration() — tabellen er ren cache som reseedes fra asset når den er tom - Parsere (GeoJSON + bundled): krever romnr > 0, lokalId valgfri - MainActivity: markørkart Map<Int, Marker>, høylysing og isSelectedAmongNearest/indexOfFirst på romnr - ShelterListAdapter: DiffUtil areItemsTheSame på romnr PWA: - shelter-db.ts: DB_VERSION 2, keyPath 'romnr', upgrade sletter og gjenoppretter store ved oldVersion < 2 - map-view.ts: _shelterRomnr i stedet for _shelterLokalId - types.ts: dokumentert identitet; fetch-shelters.ts hopper over features uten romnr (speiler Android-parseren) ARCHITECTURE.md: nytt avsnitt «Shelter identity — romnr is authoritative», felt-tabell, valideringsregel og IndexedDB-skjema oppdatert. Verifisert: emulator med v1.10.2-DB → migrering til v2 + reseed (556 rom); velg rad 2 → Oppdater → ingen duplikatrad, valg og høylysing beholdt. Playwright: seedet v1-IndexedDB → app oppgraderer til v2 (keyPath romnr, 556 poster, get(1681) treffer), dyplenke og markør OK. Forgejo: #15 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FrDGDmN2WAXvNPS85rWJGK
This commit is contained in:
parent
5b463f0ca6
commit
c3ab73c915
13 changed files with 108 additions and 54 deletions
|
|
@ -45,7 +45,7 @@ let userSelectedShelter = false;
|
|||
// updates that recompute nearestShelters (deep links, marker taps to a
|
||||
// far-away shelter), and *also* survives a forceRefresh() that replaces
|
||||
// every lokalId in the dataset. Romnr is the stable upstream business key;
|
||||
// see ARCHITECTURE.md → "Deep link identifier" for rationale.
|
||||
// see ARCHITECTURE.md → "Shelter identity" for rationale.
|
||||
let selectedRomnr: number | null = null;
|
||||
|
||||
export async function init(): Promise<void> {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue