# Implementerte en katalogstyrt deep merge av lagrede JSON‑innstillinger, som forhindrer krasj ved manglende nøkler når skjemaet utvikler seg.

2025

**Situasjon.** Plattformen lagrer JSON‑preferanser — varslingsinnstillinger og lignende — som en brukers lagrede verdier lagt over et sett med standardverdier. Den opprinnelige sammenslåingen gjorde dette på ett enkelt nivå. Problemet viser seg senere: legg til en ny nøkkel i standardverdiene, og rader som ble lagret før nøkkelen fantes, har den rett og slett ikke. Så leser en eller annen klientkode det feltet, får undefined og krasjer — nettopp for de brukerne som har vært med lengst.

**Oppgave.** Det måtte være trygt å videreutvikle preferanseskjemaet, slik at det å legge til en innstilling aldri kunne ødelegge for dem som registrerte seg før den fantes.

**Handling.** Sammenslåingen på ett nivå ble erstattet med en dyp sammenslåing styrt av standardverdiene som katalog. Standardverdiene behandles som den autoritative listen over alle nøkler som skal finnes; brukerens lagrede verdier slås rekursivt sammen oppå, så alt i katalogen kommer garantert ut til stede, enten det var med i den lagrede bloben eller ikke. Legg til en nøkkel i standardverdiene, og den dukker automatisk opp i de effektive preferansene for hver eksisterende rad, nøstede nøkler inkludert. Endringen ble innført gjennom en migrering, slik at eksisterende data fikk gevinsten med en gang i stedet for å vente på å bli skrevet på nytt.

**Resultat.** Preferansene kan vokse uten frykt. Å legge til en innstilling gir ikke lenger risiko for et krasj på grunn av et undefined‑felt i klienten, og frontenden sluttet å trenge defensive kontroller spredt rundt på hvert sted den leser en preferanse. Det ga også resten av plattformen en pålitelig måte å utvide enhver lagret JSON‑blob på — mønsteret, ikke bare den ene rettelsen.

---

- Rolle: Databaseingeniør
- Kategorier: [Backend‑utvikling](https://engineer.company/nb/categories/backend/), [Databaser](https://engineer.company/nb/categories/databases/), [PostgreSQL](https://engineer.company/nb/categories/postgresql/), [Datastyring](https://engineer.company/nb/categories/data-governance/), [Migrering og modernisering](https://engineer.company/nb/categories/migration/)
- Tjenester: [Backend- og API‑utvikling](https://engineer.company/nb/services/backend-development/), [Databasedesign og datamodellering](https://engineer.company/nb/services/database-design/), [Datastyring og datakvalitet](https://engineer.company/nb/services/data-governance/)

<https://engineer.company/nb/portfolio/implemented-a-catalogue-driven-deep-merge-for-stored-65/>
