# Har implementeret en katalogdrevet deep‑merge

Har implementeret en katalogdrevet deep‑merge for lagrede JSON‑præferencer, hvilket forhindrer nedbrud på grund af manglende nøgler, når skemaet udvikler sig.

2025

**Situation.** Platformen gemmer JSON‑præferencer — notifikationsindstillinger og den slags — som en brugers gemte værdier lagt oven på et sæt standardværdier. Den oprindelige merge gjorde det på ét niveau. Problemet viser sig senere: tilføjer man en ny nøgle til standardværdierne, har rækker, der blev gemt, før nøglen fandtes, den simpelthen ikke. Så læser noget klientkode feltet, får undefined og går ned — for netop de brugere, der har været med længst.

**Opgave.** Det skulle være sikkert at videreudvikle præferenceskemaet, så en ny indstilling aldrig kunne ødelægge noget for dem, der havde tilmeldt sig, før den fandtes.

**Handling.** Mergen på ét niveau blev erstattet af en deep merge, der bruger standardværdierne som katalog. Standardværdierne behandles som den autoritative liste over alle de nøgler, der skal findes; brugerens gemte værdier merges rekursivt ovenpå, så alt, hvad der står i kataloget, med garanti er til stede i resultatet, uanset om det fandtes i den gemte blob. Tilføjer man en nøgle til standardværdierne, dukker den automatisk op i de effektive præferencer for alle eksisterende rækker, indlejrede nøgler inklusive. Ændringen blev rullet ud via en migrering, så eksisterende data fik gavn af den med det samme i stedet for at skulle vente på at blive skrevet om.

**Resultat.** Præferencer kan vokse uden frygt. En ny indstilling risikerer ikke længere at få klienten til at gå ned på et undefined‑felt, og frontenden holdt op med at have brug for defensive tjek spredt ud over alle de steder, hvor den læser en præference. Det gav også resten af platformen en pålidelig måde at udvide enhver gemt JSON‑blob på — selve mønsteret, ikke kun den ene rettelse.

---

- Rolle: Databaseingeniør
- Kategorier: [Backend‑udvikling](https://engineer.company/da/categories/backend/), [Databaser](https://engineer.company/da/categories/databases/), [PostgreSQL](https://engineer.company/da/categories/postgresql/), [Data governance](https://engineer.company/da/categories/data-governance/), [Migrering & modernisering](https://engineer.company/da/categories/migration/)
- Ydelser: [Backend- & API‑udvikling](https://engineer.company/da/services/backend-development/), [Databasedesign & datamodellering](https://engineer.company/da/services/database-design/), [Data governance & datakvalitet](https://engineer.company/da/services/data-governance/)

<https://engineer.company/da/portfolio/implemented-a-catalogue-driven-deep-merge/>
