APPSESSION

  • Clé primaire : SessionId

  • Champs principaux : DeviceInfo, CreatedAt, LastSeenAt, ExpiresAt

  • But : 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 : TokenSetId

  • Champs principaux : Provider, ProviderUserId, RefreshTokenEnc, Scope, AccessExpiresAt, UpdatedAt, SessionId

  • But : stocke les jetons OAuth long terme (refresh token + scopes Spotify).

  • Relations :

    • FK optionnelle SessionIdAPPSESSION (le TokenSet peut ê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 ACCESSTOKEN lorsque l’ancien expire.


ACCESSTOKEN

  • Clé primaire : SessionId

  • Champs principaux : AccessTokenEnc, ExpiresAt, CreatedAt

  • But : 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).

AUDITLOG

  • Clé primaire : AuditId

  • Champs principaux : SessionId, Action, Details, CreatedAt, CorrelationId

  • But : 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).

PKCEENTRY

  • Clé primaire : State

  • Champs principaux : CodeVerifier, CodeChallenge, ExpiresAt

  • But : 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 : RefreshHash

  • Champs principaux : Reason, AddedAt, ExpiresAt

  • But : 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 : CreatedAt

  • But : 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).

PLAYLISTCACHE

  • Clé primaire composite : (ProviderUserId, PageToken)

  • Champs principaux : Json, UpdatedAt, ExpiresAt

  • But : 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).

PLAYLISTCACHE_SESSION

  • Clé primaire composite : (SessionId, ProviderUserId, PageToken)

  • Champs principaux : LinkedAt

  • But : fait le lien entre une session et les entrées du PLAYLISTCACHE qu’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 : ProviderUserId

  • Champs principaux : Json, ETag, UpdatedAt, ExpiresAt

  • But : 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é : PKCEENTRY pour le login, DENYLISTEDREFRESH pour bloquer les refresh tokens.

  • Audit & logs : AUDITLOG pour tout tracer.

  • Profil utilisateur : USERPROFILECACHE pour réduire les appels à l’API Spotify.