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
|
|
@ -175,9 +175,17 @@ function parseGeoJson(json: string): Shelter[] {
|
|||
const northing = coords[1];
|
||||
const latLon = utm33nToWgs84(easting, northing);
|
||||
|
||||
// romnr is the primary key / authoritative ID — a record without it
|
||||
// cannot be identified or deep-linked, so skip it (mirrors the Android
|
||||
// ShelterGeoJsonParser rule). lokalId is informational only.
|
||||
if (!props.romnr || props.romnr <= 0) {
|
||||
console.warn(`Skipping feature ${i}: missing romnr`);
|
||||
continue;
|
||||
}
|
||||
|
||||
shelters.push({
|
||||
lokalId: props.lokalId ?? `unknown-${i}`,
|
||||
romnr: props.romnr ?? 0,
|
||||
romnr: props.romnr,
|
||||
lokalId: props.lokalId ?? '',
|
||||
plasser: props.plasser ?? 0,
|
||||
adresse: props.adresse ?? '',
|
||||
latitude: Math.round(latLon.latitude * 1e6) / 1e6,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue