docs: log the Spotify integration
This commit is contained in:
parent
1fe7349952
commit
fad7884c42
1 changed files with 36 additions and 0 deletions
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue