Files
BUT2/mini-crm/REPERES_TP3_TP4_TP5.md

71 lines
5.3 KiB
Markdown

# Repères des modifications : TP3, TP4 et TP5
Les commentaires `TP3`, `TP4` et `TP5` dans le code indiquent **à quel exercice sert chaque partie**. Ils n'ont aucun effet sur le fonctionnement de Laravel. Certains fichiers du TP3 existaient déjà avant les corrections ; le repère identifie la fonctionnalité, pas l'auteur de chaque ligne.
Le TP6 a maintenant son propre guide : [`REPERES_TP6.md`](REPERES_TP6.md). Les règles du TP5 ont été déplacées des contrôleurs vers les Form Requests au TP6 ; leur comportement reste le même.
## TP3 - Base de données et Eloquent
Objectif : enregistrer des clients et des produits dans SQLite, puis les lire avec Eloquent et les afficher dans Blade.
| Fichier | Rôle |
| --- | --- |
| `database/migrations/2026_09_16_075551_create_clients_table.php` | Crée la table `clients` initiale. |
| `database/migrations/2026_09_16_085026_create_product_table.php` | Crée la table `products` au pluriel, selon la convention du modèle `Product`. |
| `app/Models/Client.php`, `app/Models/Product.php` | Déclarent les champs `$fillable` pour `create()` et `update()`. Le téléphone a été ajouté au modèle Client au TP5. |
| `database/seeders/ClientSeeder.php`, `database/seeders/ProductSeeder.php` | Contiennent les trois clients et les cinq produits d'exemple. |
| `database/seeders/DatabaseSeeder.php` | Appelle les deux seeders. |
| `app/Http/Controllers/ProductController.php` (`index`) | Lit les produits avec `Product::all()` et transmet les résultats à la vue. |
| `resources/views/products/index.blade.php` | Affiche les produits. La liste a ensuite reçu les actions CRUD du TP4. |
La liste clients du TP3 est maintenant assurée par `ClientController@index` : `Client::all()` lit la table et `clients.index` affiche les données. L'ancien `ClientsController.php` reste dans le projet, mais les routes utilisent `ClientController.php` depuis le TP4.
## TP4 - CRUD complet
Objectif : créer, lister, voir, modifier et supprimer un client ou un produit.
| Fichier | Rôle |
| --- | --- |
| `routes/web.php` | Les deux appels `Route::resource()` génèrent sept routes pour Clients et sept pour Produits. |
| `app/Http/Controllers/ClientController.php` | Méthodes `index`, `create`, `store`, `show`, `edit`, `update`, `destroy`. |
| `app/Http/Controllers/ProductController.php` | Mêmes actions pour les produits. `index` reprend la lecture du TP3. |
| `resources/views/clients/index.blade.php`, `resources/views/products/index.blade.php` | Listes, totaux et actions Voir/Modifier/Supprimer ; indication du stock faible pour les produits. |
| `resources/views/clients/create.blade.php`, `resources/views/clients/edit.blade.php` | Formulaires de création et modification d'un client. |
| `resources/views/products/create.blade.php`, `resources/views/products/edit.blade.php` | Formulaires équivalents pour les produits. |
| `resources/views/clients/show.blade.php`, `resources/views/products/show.blade.php` | Détail d'un seul enregistrement. |
| `resources/views/layouts/app.blade.php` | Navigation entre les pages. |
| `tests/Feature/CrudTest.php` | Vérifie les opérations CRUD dans une base de test. |
Dans les formulaires, `@csrf` protège les requêtes POST et `@method('PUT')` permet la mise à jour. La suppression utilise `@method('DELETE')` dans les listes.
## TP5 - Validation des données
Objectif : refuser les données incorrectes avant l'enregistrement, expliquer les erreurs à l'utilisateur et conserver les valeurs saisies.
| Fichier | Rôle |
| --- | --- |
| `database/migrations/2026_10_07_000000_adapt_clients_and_products_for_tp5.php` | Ajoute `phone`, rend `city` facultative et autorise les prix décimaux. |
| `app/Models/Client.php` | Ajoute `phone` à `$fillable`. |
| `app/Http/Requests/StoreClientRequest.php`, `app/Http/Requests/UpdateClientRequest.php` | Règles TP5 pour le nom, l'email, le téléphone et la ville, déplacées ici au TP6 avec leurs messages français. |
| `app/Http/Requests/StoreProductRequest.php`, `app/Http/Requests/UpdateProductRequest.php` | Règles TP5 pour le nom, le prix et le stock, déplacées ici au TP6. |
| `resources/views/clients/create.blade.php`, `resources/views/clients/edit.blade.php` | Liste des erreurs, message sous chaque champ et anciennes valeurs avec `old()`. |
| `resources/views/products/create.blade.php`, `resources/views/products/edit.blade.php` | Même traitement pour les produits. |
| `resources/views/clients/index.blade.php`, `resources/views/clients/show.blade.php` | Affichent le téléphone et gèrent les champs facultatifs vides. |
| `tests/Feature/ValidationTp5Test.php` | Vérifie les données refusées, les messages, les anciennes valeurs, les mises à jour et un prix décimal. |
Le sujet impose `phone: nullable|string|max:20` : cette règle accepte les lettres. Si le professeur demande un numéro composé uniquement de chiffres et séparateurs, il faudra ajouter une règle spécifique ; le TP5 ne la fournit pas.
## Vérifier et lancer le projet
Dans un terminal ouvert dans le dossier `mini-crm` :
```powershell
php artisan migrate:status
php artisan test
php artisan serve
```
Puis ouvrir `http://127.0.0.1:8000/clients` ou `http://127.0.0.1:8000/products`.
Les PDF `TP3_walkthrough.pdf`, `TP4_walkthrough_complet.pdf` et `TP5_walkthrough_complet.pdf` détaillent chaque TP. Les commentaires du code servent de repères rapides ; ce fichier indique où chercher.