APPSESSION
Clé primaire :
SessionIdChamps principaux :
DeviceInfo,CreatedAt,LastSeenAt,ExpiresAtBut : représente une session active ouverte par un utilisateur sur un appareil donné (mobile, web, etc.).
Relations :
1 → N avec
TOKENSET(liens vers jeux de tokens OAuth liés à cette session, mais optionnel).1 → 1 avec
ACCESSTOKEN(access token Spotify actif pour cette session).1 → N avec
PLAYLISTSELECTION(sélections faites par l’utilisateur pendant la session).1 → N avec
AUDITLOG(traces d’actions liées à la session).1 → N avec
PLAYLISTCACHE_SESSION(playlists du cache associées à cette session pour permettre un nettoyage ciblé).
TOKENSET
Clé primaire :
TokenSetIdChamps principaux :
Provider,ProviderUserId,RefreshTokenEnc,Scope,AccessExpiresAt,UpdatedAt,SessionIdBut : stocke les jetons OAuth long terme (refresh token + scopes Spotify).
Relations :
FK optionnelle
SessionId→APPSESSION(leTokenSetpeut être rattaché à la session active en cours pour faciliter les renouvellements, mais n’est pas supprimé si la session est détruite :ON DELETE SET NULL).Permet de régénérer un
ACCESSTOKENlorsque l’ancien expire.
ACCESSTOKEN
Clé primaire :
SessionIdChamps principaux :
AccessTokenEnc,ExpiresAt,CreatedAtBut : stocke l’access token Spotify actuel pour une session. Durée de vie courte, renouvelable via le
TOKENSET.Relations :
- FK vers
APPSESSION(1:1, supprimé automatiquement si la session est détruite :ON DELETE CASCADE).
- FK vers
AUDITLOG
Clé primaire :
AuditIdChamps principaux :
SessionId,Action,Details,CreatedAt,CorrelationIdBut : journalise les événements importants (connexion, déconnexion, erreurs, opérations utilisateurs…).
Relations :
- FK optionnelle vers
APPSESSION(permet de savoir dans quelle session l’action a eu lieu, mais peut être null pour des événements globaux).
- FK optionnelle vers
PKCEENTRY
Clé primaire :
StateChamps principaux :
CodeVerifier,CodeChallenge,ExpiresAtBut : gère le flux PKCE OAuth (sécurité lors du login Spotify).
Relations : isolée (pas liée directement aux sessions, utilisée uniquement à l’authentification initiale).
DENYLISTEDREFRESH
Clé primaire :
RefreshHashChamps principaux :
Reason,AddedAt,ExpiresAtBut : conserve les refresh tokens invalidés (logout, révocation, sécurité).
Relations : aucune clé externe — table indépendante pour bloquer l’usage futur d’un refresh token compromis.
PLAYLISTSELECTION
Clé primaire composite :
(SessionId, Provider, ProviderUserId, PlaylistId)Champs principaux :
CreatedAtBut : trace les playlists que l’utilisateur a sélectionnées ou modifiées dans l’application durant une session (permet de restaurer la sélection plus tard ou d’analyser l’historique d’usage).
Relations :
- FK vers
APPSESSION(sélections liées à une session spécifique ; supprimées à la déconnexion).
- FK vers
PLAYLISTCACHE
Clé primaire composite :
(ProviderUserId, PageToken)Champs principaux :
Json,UpdatedAt,ExpiresAtBut : stocke en cache global les playlists importées depuis Spotify pour un utilisateur donné, page par page (pagination Spotify).
Relations :
- Pas de FK directe : c’est un cache partagé entre plusieurs sessions du même utilisateur (basé sur
ProviderUserId).
- Pas de FK directe : c’est un cache partagé entre plusieurs sessions du même utilisateur (basé sur
PLAYLISTCACHE_SESSION
Clé primaire composite :
(SessionId, ProviderUserId, PageToken)Champs principaux :
LinkedAtBut : fait le lien entre une session et les entrées du
PLAYLISTCACHEqu’elle utilise.
Permet de nettoyer efficacement les données du cache lors d’un logout ou d’une expiration de session.Relations :
FK vers
APPSESSION(ON DELETE CASCADE).Index vers
(ProviderUserId, PageToken)pour retrouver facilement les lignes du cache global correspondantes.
USERPROFILECACHE
Clé primaire :
ProviderUserIdChamps principaux :
Json,ETag,UpdatedAt,ExpiresAtBut : stocke en cache les informations de profil Spotify (nom, image, email, pays…).
Relations :
- Table indépendante (peut être purgée en cas de logout complet, mais non liée aux sessions par FK).
🧩 Schéma logique simplifié
APPSESSION --1---1--> ACCESSTOKEN
\
\--< TOKENSET
\--< PLAYLISTSELECTION
\--< AUDITLOG
\--< PLAYLISTCACHE_SESSION --> PLAYLISTCACHE
USERPROFILECACHE (isolé)
DENYLISTEDREFRESH (isolé)
PKCEENTRY (isolé)
💡 Résumé
Sessions (
APPSESSION) : cœur de la navigation utilisateur.Tokens (
TOKENSET&ACCESSTOKEN) : accès sécurisé à Spotify.Playlists (
PLAYLISTCACHE,PLAYLISTCACHE_SESSION,PLAYLISTSELECTION) : cache + choix utilisateur.Sécurité :
PKCEENTRYpour le login,DENYLISTEDREFRESHpour bloquer les refresh tokens.Audit & logs :
AUDITLOGpour tout tracer.Profil utilisateur :
USERPROFILECACHEpour réduire les appels à l’API Spotify.