#145 : Ajout du seeder Spotify.

This commit is contained in:
Loic Masi
2026-04-02 17:59:36 +02:00
parent 9b12d2a255
commit 943fc00f3c
21 changed files with 728 additions and 351 deletions

View File

@@ -0,0 +1,172 @@
# Récapitulatif des modifications pour le seeder Spotify
## Objectif
Ajout d’un seeder capable de récupérer de vraies données depuis l’API Spotify pour alimenter l’application avec :
- des artistes
- des styles
- des titres
- des commentaires générés localement autour de ces vraies données
## 1. Nouveau seeder Spotify
### Fichier ajouté
[Webzine.Entity/Fixtures/SeedDataSpotify.cs](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.Entity\Fixtures\SeedDataSpotify.cs)
### Ce qui a été fait
- création de la classe `SeedDataSpotify`
- ajout de la classe de configuration `SpotifySeederOptions`
- appel à l’API Spotify via `HttpClient`
- authentification avec le flux OAuth `client_credentials`
- récupération d’artistes par genre
- récupération des albums de chaque artiste
- récupération des titres de chaque album
- mapping des données Spotify vers les entités métier :
- `Artiste`
- `Style`
- `Titre`
- `Commentaire`
- génération de commentaires locaux via `SeedDataLocal`
- transformation des genres Spotify en `Style`
- génération de valeurs applicatives cohérentes :
- `Chronique`
- `NbLectures`
- `NbLikes`
- `DateSortie`
- `UrlJaquette`
- `UrlEcoute`
### Comportement
Le seeder produit un jeu de données exploitable par :
- le mode base de données
- le mode mémoire
## 2. Création d’un conteneur commun pour le seeding
### Fichier ajouté
[Webzine.Entity/Fixtures/SeedDataSet.cs](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.Entity\Fixtures\SeedDataSet.cs)
### Ce qui a été fait
Ajout d’un objet `SeedDataSet` contenant :
- `Artistes`
- `Styles`
- `Titres`
- `Commentaires`
### Pourquoi
Cela permet d’unifier le résultat du seeding, qu’il vienne :
- du générateur local
- de Spotify
## 3. Adaptation du repository DB
### Fichier modifié
[Webzine.Repository/DbEntityRepository.cs](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.Repository\DbEntityRepository.cs)
### Ce qui a été fait
Modification de `SeedBaseDeDonnees` pour qu’elle puisse :
- continuer à générer les données locales comme avant
- ou accepter un `SeedDataSet` externe déjà préparé
### Résultat
Le repository peut maintenant insérer en base :
- soit les données fake locales
- soit les données réelles récupérées depuis Spotify
## 4. Branchement du seeder dans le démarrage de l’application
### Fichier modifié
[Webzine.WebApplication/Program.cs](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.WebApplication\Program.cs)
### Ce qui a été fait
- enregistrement de la configuration `SpotifySeeder`
- enregistrement de `SeedDataSpotify` via `AddHttpClient`
- lecture de `SeederType`
- ajout de la logique :
- si `Seeder = Spotify`, on appelle `SeedDataSpotify`
- sinon on garde `SeedDataLocal`
### Cas couverts
- `Repository = Db`
- `Repository = Local`
Donc le mode Spotify fonctionne aussi bien :
- avec SQLite/PostgreSQL
- qu’avec le store mémoire
## 5. Ajout de la configuration Spotify
### Fichiers modifiés
- [Webzine.WebApplication/appsettings.json](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.WebApplication\appsettings.json)
- [Webzine.WebApplication/appsettings.Development.json](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.WebApplication\appsettings.Development.json)
- [Webzine.WebApplication/appsettings.Production.json](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.WebApplication\appsettings.Production.json)
### Ce qui a été ajouté
Section `SpotifySeeder` avec :
- `ClientId`
- `ClientSecret`
- `Market`
- `Genres`
- `ArtistsPerGenre`
- `AlbumsPerArtist`
- `TracksPerAlbum`
- `MaxCommentsPerTrack`
### Utilisation
Pour activer le seeder Spotify :
```json
{
"Seeder": "Spotify"
}
```
Et renseigner :
```json
"SpotifySeeder": {
"ClientId": "...",
"ClientSecret": "..."
}
```
## 6. Dépendance ajoutée
### Fichier modifié
[Webzine.Entity/Webzine.Entity.csproj](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.Entity\Webzine.Entity.csproj)
### Ce qui a été fait
Ajout du package :
- `Microsoft.Extensions.Options`
### Pourquoi
Pour injecter proprement `SpotifySeederOptions` dans `SeedDataSpotify`
## 7. Effet sur les données de l’application
Avec le seeder Spotify, les titres créés utilisent maintenant :
- un vrai nom de titre
- un vrai artiste
- un vrai album
- une vraie jaquette Spotify
- une vraie URL Spotify
- des styles dérivés des genres Spotify
Les commentaires restent générés localement pour enrichir l’affichage.
## 8. Point d’attention
Je n’ai pas pu valider la compilation complète dans cet environnement à cause d’un problème SDK/.NET local lié au workload resolver, pas à une erreur C# remontée sur les fichiers modifiés.
## 9. Fichiers impactés
### Ajoutés
- [Webzine.Entity/Fixtures/SeedDataSpotify.cs](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.Entity\Fixtures\SeedDataSpotify.cs)
- [Webzine.Entity/Fixtures/SeedDataSet.cs](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.Entity\Fixtures\SeedDataSet.cs)
### Modifiés
- [Webzine.Repository/DbEntityRepository.cs](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.Repository\DbEntityRepository.cs)
- [Webzine.WebApplication/Program.cs](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.WebApplication\Program.cs)
- [Webzine.WebApplication/appsettings.json](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.WebApplication\appsettings.json)
- [Webzine.WebApplication/appsettings.Development.json](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.WebApplication\appsettings.Development.json)
- [Webzine.WebApplication/appsettings.Production.json](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.WebApplication\appsettings.Production.json)
- [Webzine.Entity/Webzine.Entity.csproj](c:\Users\lmasi\Documents\DIIAGE\P4\Webzine\Webzine.Entity\Webzine.Entity.csproj)