Implementerte en katalogstyrt deep merge av lagrede JSON‑innstillinger, som forhindrer krasj ved manglende nøkler når skjemaet utvikler seg.
Arbeidet utført: 2025
lagrede innstillinger som overlever en skjemaendring
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.
Se tilbake på Designet et funksjonsbasert datalag i PostgreSQL — 1 275 lagrede funksjoner fordelt på 34 skjemaer — slik at hver lesing og skriving går gjennom en funksjon databasen kan gi tilgang til, i stedet for gjennom en tabell. Les videre: Bygde lojalitets- og omdømmesystemet — 67 funksjoner over en hovedbok på 31 tabeller, med ligaer, merker og en innløsningsbutikk — med radlås på saldoen for å lukke vinduet for dobbeltforbruk. Eller ta en titt på hele porteføljen.
Ett stykke av en lengre oversikt — og den ligger i sin helhet her.
Hver oppføring er skrevet på samme måte: situasjonen, oppgaven, hva vi gjorde, og hva som endret seg.