docs: log the Spotify integration
Some checks are pending
ci / backend (push) Waiting to run
ci / frontend (push) Waiting to run

This commit is contained in:
Justin Visser 2026-08-10 11:34:35 +02:00
parent 1fe7349952
commit fad7884c42

View file

@ -33,3 +33,39 @@ Wat ik heb laten vallen of uitgesteld:
frontend-typecontract bewust nog niet neergezet. Die ontstaan in de stap
waar ze horen. Ik probeer op die manier bewust vroeg drift en dode code te voorkomen.
- Geen apart beslisdocument. De motivering staat in de README en hier.
## Spotify-koppeling (ochtend dag 2)
Wat ik deed:
- Login via Spotify met PKCE en cookie-sessies: tokens blijven server-side, de browser krijgt alleen een opaque HttpOnly cookie.
- Dunne async client op de Spotify Web API met per-endpoint retrybeleid:
leesacties herhalen maximaal 1 keer en alleen binnen een grens
(Retry-After), schrijfacties op playlists nooit.
- Token-refresh is single-flight: parallelle requests delen 1 refresh in
plaats van er allemaal zelf een te starten.
- Mapping van Spotify-JSON naar eigen modellen op 1 plek; kapotte items
vallen weg in plaats van dat ze de app breken.
- Getypeerde fouten en 12 transport- en routetests op een mock transport.
- Na een eerste review de login-flow uit de routes getrokken naar een eigen
module (routes zijn nu dunne doorgeefluiken) en het retrybeleid herschreven
naar een lineaire keten van losse regels in plaats van een loop met flags;
foutdetails uit de Spotify-body worden meegenomen in de getypeerde fouten
en quota-uitputting wordt apart herkend en nooit opnieuw geprobeerd.
- Daarna het API-contract vastgelegd: request-schema en de gestreamde
events (metadata / track / warning / error / done), gespiegeld in
TypeScript.
Waarom:
- Schrijfacties blind herhalen kan dubbele playlist-items opleveren; dat
risico sluit ik structureel uit in het retrybeleid.
- Het contract eerst bevriezen maakt parallel werken aan frontend en
pipeline mogelijk zonder elkaar te breken.
Wat ik heb laten vallen of uitgesteld:
- De naam-naar-ID cache en de port-interfaces doorgeschoven naar de
pipeline-stap; daar bestaat het ontwerp pas echt.
- OpenAPI-codegen voor het contract overwogen en afgewezen: de kern van dit
contract is de event-stream en die modelleert OpenAPI niet.