#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 dun seeder capable de récupérer de vraies données depuis lAPI Spotify pour alimenter lapplication 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 à lAPI Spotify via `HttpClient`
- authentification avec le flux OAuth `client_credentials`
- récupération dartistes 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 dun 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 dun objet `SeedDataSet` contenant :
- `Artistes`
- `Styles`
- `Titres`
- `Commentaires`
### Pourquoi
Cela permet dunifier le résultat du seeding, quil 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 quelle 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 lapplication
### 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
- quavec 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 lapplication
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 laffichage.
## 8. Point dattention
Je nai pas pu valider la compilation complète dans cet environnement à cause dun 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)