238 lines
8.1 KiB
Markdown
238 lines
8.1 KiB
Markdown
# Dossier de configuration - Projet Webzine
|
|
|
|
**Équipe 1**
|
|
**Formation :** Développement .NET niveau 1 / Dr1-P4
|
|
**Date :** Mars 2026
|
|
|
|
---
|
|
|
|
## Table des modifications
|
|
|
|
| Date | Auteur |
|
|
| ----- | ------------- |
|
|
| 25/03 | Clément Bobin |
|
|
| 31/03 | Joséphine Vetu |
|
|
| 08/04 | Joséphine Vetu |
|
|
|
|
---
|
|
|
|
## 1. Prérequis
|
|
|
|
Avant de lancer l'application, assurez-vous d'avoir installé les outils suivants :
|
|
|
|
| Outil | Version minimale | Lien |
|
|
| -------------------------------------- | ---------------------------- | ------------------------------------- |
|
|
| .NET SDK | 10.0 | https://dotnet.microsoft.com/download |
|
|
| Node.js (optionnel, pour outils front) | 18+ | https://nodejs.org |
|
|
| Git | 2.x | https://git-scm.com |
|
|
| Un IDE | Visual Studio 2022+ ou Rider | - |
|
|
|
|
---
|
|
|
|
## 2. Récupérer le projet
|
|
|
|
```bash
|
|
git clone <url-du-dépôt>
|
|
cd Webzine
|
|
```
|
|
|
|
---
|
|
|
|
## 3. Structure des projets
|
|
|
|
Le projet est organisé en plusieurs bibliothèques de classes et une application web :
|
|
|
|
```
|
|
Webzine.sln
|
|
├── Webzine.Entity/ → Entités du domaine (modèles)
|
|
├── Webzine.Entity.Tests/ → Tests unitaires MSTest
|
|
├── Webzine.Repository.Contracts/ → Interfaces des repositories
|
|
├── Webzine.Repository/ → Implémentations des repositories
|
|
├── Webzine.Business.Contracts/ → Interfaces de la couche métier
|
|
├── Webzine.Business/ → Logique métier
|
|
├── Webzine.EntitiesContext/ → Contexte Entity Framework (à venir)
|
|
├── Webzine.Documentation/ → Documentation, StyleCop, rapports
|
|
└── Webzine.WebApplication/ → Application ASP.NET Core MVC (.NET 10)
|
|
```
|
|
|
|
---
|
|
|
|
## 4. Lancer l'application
|
|
|
|
### Via la ligne de commande
|
|
|
|
```bash
|
|
cd Webzine.WebApplication
|
|
dotnet run
|
|
```
|
|
|
|
L'application est accessible par défaut à :
|
|
|
|
- **HTTP :** http://localhost:5038
|
|
- **HTTPS :** https://localhost:7095
|
|
|
|
Ces URLs sont configurées dans `Webzine.WebApplication/Properties/launchSettings.json`.
|
|
|
|
### Via Visual Studio
|
|
|
|
Ouvrir `Webzine.sln`, sélectionner le profil `https` ou `http`, puis lancer avec F5 ou Ctrl+F5.
|
|
|
|
---
|
|
|
|
## 5. Configuration applicative
|
|
|
|
La configuration de l'application est répartie sur plusieurs fichiers `appsettings` selon l'environnement.
|
|
|
|
### `appsettings.json` - configuration commune
|
|
|
|
Ce fichier contient les paramètres partagés entre tous les environnements :
|
|
|
|
- **Logging** : niveau `Information` par défaut, `Warning` pour ASP.NET Core, et `Debug` pour la couche repository afin de tracer les requêtes.
|
|
- **Webzine** : paramètres d'affichage (nombre de chroniques et de titres sur la page d'accueil, nombre de lignes dans les vues d'administration). Ces valeurs sont injectées via `IConfiguration` et modifiables sans recompilation.
|
|
- **ConnectionStrings** : chaînes de connexion pour SQLite (dev) et PostgreSQL (prod). L'application bascule de l'une à l'autre selon la valeur de `Repository`.
|
|
- **SpotifySeeder** : paramètres de l'import Spotify - credentials, marché cible, genres musicaux, et limites de volumétrie (artistes par genre, albums par artiste, titres par album, commentaires par titre).
|
|
- **EfPerformance** : seuil en millisecondes au-delà duquel une requête Entity Framework est considérée comme lente (60 ms par défaut).
|
|
|
|
### Configuration par environnement
|
|
|
|
#### Développement - `appsettings.Development.json`
|
|
|
|
```json
|
|
{
|
|
"Seeder": "Spotify",
|
|
"Repository": "Db",
|
|
"SpotifySeeder": {
|
|
"ClientId": "",
|
|
"ClientSecret": ""
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Production - `appsettings.Production.json`
|
|
|
|
```json
|
|
{
|
|
"Seeder": "Local",
|
|
"Repository": "Db",
|
|
"SpotifySeeder": {
|
|
"ClientId": "",
|
|
"ClientSecret": ""
|
|
}
|
|
}
|
|
```
|
|
|
|
### Valeurs acceptées
|
|
|
|
Les propriétés `Seeder` et `Repository` correspondent aux enums suivants :
|
|
|
|
```csharp
|
|
public enum SeederType
|
|
{
|
|
Local, // Données mockées en mémoire
|
|
Spotify, // Données récupérées depuis l'API Spotify
|
|
}
|
|
|
|
public enum RepositoryType
|
|
{
|
|
Local, // Données en mémoire (pas de base de données)
|
|
Db, // Base de données (SQLite en dev, PostgreSQL en prod)
|
|
}
|
|
```
|
|
|
|
| Propriété | Type | Valeurs acceptées | Description |
|
|
|---|---|---|---|
|
|
| `Seeder` | `SeederType` | `Local`, `Spotify` | Source des données au démarrage |
|
|
| `Repository` | `RepositoryType` | `Local`, `Db` | Mode d'accès aux données |
|
|
| `SpotifySeeder.ClientId` | string | - | Identifiant de l'application Spotify |
|
|
| `SpotifySeeder.ClientSecret` | string | - | Secret de l'application Spotify |
|
|
|
|
|
|
---
|
|
|
|
## 6. Logging (NLog)
|
|
|
|
La configuration du logging se trouve dans `Webzine.WebApplication/nlog.config`.
|
|
|
|
Les logs sont écrits dans le dossier `/Logs/` avec deux fichiers :
|
|
|
|
| Fichier | Contenu |
|
|
| --------------------- | ----------------------------------------------------- |
|
|
| `nlog-all-{date}.log` | Tous les logs (Debug et supérieur pour l'application) |
|
|
| `nlog-own-{date}.log` | Logs applicatifs avec URL de la requête |
|
|
|
|
Les logs de la console sont également activés, utiles lors du développement.
|
|
|
|
**Niveaux configurés :**
|
|
|
|
- `Webzine.WebApplication.*` → Debug et supérieur
|
|
- `Microsoft.*` → Warning et supérieur (pour réduire le bruit)
|
|
- `Microsoft.Hosting.Lifetime*` → Info (pour voir le démarrage de l'appli)
|
|
|
|
Pour modifier le niveau de log minimum sans recompiler, éditer la règle correspondante dans `nlog.config`. NLog recharge automatiquement sa configuration (`autoReload="true"`).
|
|
|
|
---
|
|
|
|
## 7. Lancer les tests
|
|
|
|
```bash
|
|
cd Webzine.Entity.Tests
|
|
dotnet test
|
|
```
|
|
|
|
Ou depuis la solution complète :
|
|
|
|
```bash
|
|
dotnet test Webzine.sln
|
|
```
|
|
|
|
Les tests vérifient les contraintes de validation (annotations DataAnnotations) sur toutes les entités. Ils s'exécutent en parallèle au niveau des méthodes (`[assembly: Parallelize(Scope = ExecutionScope.MethodLevel)]`).
|
|
|
|
**Résultat attendu :** 55 tests passants, 0 échec.
|
|
|
|
---
|
|
|
|
## 8. Routes principales
|
|
|
|
| URL | Contrôleur | Description |
|
|
| ----------------------------- | --------------------------- | ------------------------ |
|
|
| `/` | `AccueilController.Index` | Page d'accueil |
|
|
| `/artiste/{nom}` | `ArtisteController.Index` | Page d'un artiste |
|
|
| `/titre/{id}` | `TitreController.Details` | Détail d'un titre |
|
|
| `/titre/style/{style}` | `TitreController.Style` | Titres par style |
|
|
| `/recherche` (POST) | `RechercheController.Index` | Résultats de recherche |
|
|
| `/Administration/Dashboard` | `DashboardController.Index` | Tableau de bord admin |
|
|
| `/Administration/Artiste` | `ArtisteController` (admin) | Gestion des artistes |
|
|
| `/Administration/Titre` | `TitreController` (admin) | Gestion des titres |
|
|
| `/Administration/Style` | `StyleController` | Gestion des styles |
|
|
| `/Administration/Commentaire` | `CommentaireController` | Gestion des commentaires |
|
|
|
|
---
|
|
|
|
## 10. Variables d'environnement
|
|
|
|
L'environnement est contrôlé par la variable `ASPNETCORE_ENVIRONMENT`. En développement, elle vaut `Development` (configuré dans `launchSettings.json`).
|
|
|
|
En production, positionner :
|
|
|
|
```bash
|
|
export ASPNETCORE_ENVIRONMENT=Production
|
|
```
|
|
|
|
Cela désactive les pages d'erreur détaillées et active les optimisations de performance ASP.NET Core.
|
|
|
|
## Ajout du pre-commit
|
|
|
|
```bash
|
|
git config core.hooksPath Webzine.Documentation/git_hooks
|
|
```
|
|
|
|
Les fichiers présents dans le dossier git_hooks sont les suivants:
|
|
Le pre-commit reformatte le code à chaque commit.
|
|
Le commit-msg vérifie si le message du commit respecte bien les conventions du cahier des charges:
|
|
|
|
- le message référence un ticket
|
|
- le message termine par un point
|
|
- le message doit faire au moins 10 caractères
|
|
|
|
Il n'est pas nécessaire de les copier et de les ajouter au dossier caché .git.
|
|
La commande ci-dessus suffit. |