# Har bygget loyalitetspoint, ligaer og badges

Har bygget loyalitets- og omdømmesystemet — 67 funktioner over et ledger på 31 tabeller, med ligaer, badges og en indløsningsshop — og med en row lock på saldoen til at lukke vinduet for dobbeltforbrug.

2025

**Situation.** Et professionelt netværk har et koldstartsproblem: platformen er først værd at bruge, når andre allerede bruger den, og indtil da er der ikke meget grund til at komme tilbage. Den sædvanlige løftestang er et belønningssystem — point for at bidrage, en status, der afspejler omdømme — som er nemt at beskrive og lumsk at bygge, for i det øjeblik point kan bruges, er de penge, og hver eneste fejl, man kan begå med penge, kan begås her.

**Opgave.** Bidrag skulle kunne måles og belønnes, med en saldo, der ikke kunne bruges to gange.

**Handling.** Loyalty‑skemaet løber op i 31 tabeller og 67 funktioner, med status i yderligere 5 tabeller og 32 funktioner, og discovery- og personalization‑skemaer ved siden af til at afgøre, hvad et givent medlem ser. Oven på ledgeret sidder ligaer, badges og en indløsningsshop, hvor en saldo bliver til noget virkeligt. Det, der krævede omhu, var den ældste fejl i bogen: tjekker man saldoen og bruger den bagefter, kommer to requests, der ankommer samtidig, begge igennem tjekket. Hver mutation tager en row lock på walleten, før den læser den, så den anden request venter på, at den første bliver færdig, i stedet for at kappes med den. At walleten ligger i den samme database som alt andet, er det, der overhovedet gør det muligt — saldoen og det, den købte, committer sammen eller slet ikke.

**Resultat.** Bidrag bliver målt og belønnet, og en saldo er et regnestykke og ikke en tilnærmelse. Row locking er det langsommere svar og blev valgt alligevel: kamp om den samme wallet bliver til ventetid, og alternativet er et medlem, der bruger de samme point to gange, og nogen, der afstemmer det i hånden bagefter.

---

- 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/), [SQL](https://engineer.company/da/categories/sql/), [Optimering af ydeevne](https://engineer.company/da/categories/performance/), [Produkt & krav](https://engineer.company/da/categories/product/)
- Ydelser: [Backend- & API‑udvikling](https://engineer.company/da/services/backend-development/), [Databasedesign & datamodellering](https://engineer.company/da/services/database-design/), [Produktstrategi & kravspecifikation](https://engineer.company/da/services/product-strategy/)

<https://engineer.company/da/portfolio/built-a-loyalty-wallet-leagues-and-badges/>
