173 lines
5.7 KiB
Markdown
173 lines
5.7 KiB
Markdown
# 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)
|