Hoppa till innehållet

Implementerade en katalogstyrd djupsammanslagning av lagrade JSON‑inställningar som förhindrar krascher på grund av saknade nycklar när schemat utvecklas.

sparade inställningar som klarar en schemaändring

Situation. Plattformen lagrar inställningar som JSON — aviseringsinställningar och liknande — i form av en användares sparade värden lagda ovanpå en uppsättning standardvärden. Den ursprungliga sammanslagningen gjorde det på en enda nivå. Problemet visar sig senare: lägg till en ny nyckel i standardvärdena, så saknar rader som sparades innan nyckeln fanns den helt enkelt. Sedan läser någon klientkod det fältet, får undefined och kraschar — för just de användare som har varit med längst.

Uppgift. Inställningsschemat behövde kunna utvecklas på ett säkert sätt, så att en ny inställning aldrig kunde ställa till det för de användare som registrerade sig innan den fanns.

Handling. Sammanslagningen på en nivå ersattes med en djup sammanslagning som styrs av standardvärdena som katalog. Standardvärdena behandlas som den auktoritativa listan över varje nyckel som ska finnas; användarens lagrade värden slås samman rekursivt ovanpå, så att allt som finns i katalogen garanterat finns med i resultatet, oavsett om det fanns i den sparade bloben eller inte. Lägg till en nyckel i standardvärdena, så dyker den automatiskt upp i de gällande inställningarna för varje befintlig rad, nästlade nycklar inräknade. Ändringen rullades ut genom en migrering, så att befintliga data fick nyttan direkt i stället för att vänta på att skrivas om.

Resultat. Inställningarna kan växa utan oro. En ny inställning riskerar inte längre en krasch i klienten på grund av ett fält som är undefined, och frontenden slapp behovet av defensiva kontroller utspridda på varje ställe där den läser en inställning. Det gav också resten av plattformen ett pålitligt sätt att utöka vilken lagrad JSON‑blob som helst — mönstret, inte bara den enskilda rättningen.

En del av en längre historik — och den finns i sin helhet här.

Varje post är skriven på samma sätt: situationen, uppgiften, vad vi gjorde och vad som förändrades.

Se hela historiken