# Mini-CRM — TP9 + TP10 Ce ZIP contient les fichiers à ajouter/remplacer dans le projet `mini-crm` du dépôt `yolou/BUT2`. ## Ce que j'ai fait — TP9 - J'ai activé le routage API dans `bootstrap/app.php`. - J'ai créé `routes/api.php`. - J'ai ajouté `GET /api/test`. - J'ai créé un contrôleur séparé `Api/ClientController`. - J'ai ajouté `GET /api/clients` pour récupérer les clients. - J'ai ajouté `GET /api/clients/{client}` avec le route model binding. - J'ai ajouté `POST /api/clients` pour créer un client. - J'ai validé `name`, `email`, `phone` et `city`. - Comme la migration du projet impose un email unique, j'ai ajouté la règle `unique:clients,email`. - J'ai réalisé le défi autonome : `GET /api/clients/search?email=...`. - Si aucun email ne correspond, l'API renvoie 404. ## Ce que j'ai fait — TP10 - J'ai créé `ClientResource` afin de maîtriser le JSON exposé. - J'utilise la Resource pour la liste, le détail, la création et la modification. - J'ai ajouté `PATCH /api/clients/{client}`. - Pour PATCH, j'utilise `sometimes` afin de permettre une modification partielle. - Pour l'email, j'ignore l'identifiant du client courant lors du contrôle d'unicité. - J'ai ajouté `DELETE /api/clients/{client}`. - Une suppression réussie renvoie HTTP 204 No Content. - J'ai réalisé le défi de pagination avec `Client::paginate(10)`. ## Installation dans ton projet Copie le contenu de ce dossier dans : `C:\Users\Junior\Desktop\laraveltp\mini_crm_aylane` en conservant l'arborescence. Les fichiers principaux sont : - `bootstrap/app.php` - `routes/api.php` - `app/Http/Controllers/Api/ClientController.php` - `app/Http/Resources/ClientResource.php` Le modèle `app/Models/Client.php` de ton dépôt possède déjà les champs fillable `name`, `email`, `phone`, `city`, donc il n'a pas besoin d'être remplacé. ## Commandes à lancer ```bash php artisan optimize:clear php artisan route:list --path=api php artisan serve ``` > Le sujet propose `php artisan install:api`, notamment pour installer Sanctum. > Ici Sanctum n'est pas nécessaire au fonctionnement demandé dans les TP9/TP10 : > le routage API est déclaré directement dans `bootstrap/app.php`. > Le TP10 demande justement de ne pas mettre en place un nouveau système > d'authentification pour cette partie pédagogique. ## Routes attendues | Méthode | URL | Rôle | |---|---|---| | GET | `/api/test` | Vérifier l'API | | GET | `/api/clients` | Clients paginés (10/page) | | GET | `/api/clients/search?email=...` | Recherche par email | | GET | `/api/clients/{client}` | Détail d'un client | | POST | `/api/clients` | Créer un client | | PATCH | `/api/clients/{client}` | Modifier partiellement | | DELETE | `/api/clients/{client}` | Supprimer | ## Tests rapides ### Créer ```bash curl -X POST http://127.0.0.1:8000/api/clients ^ -H "Content-Type: application/json" ^ -H "Accept: application/json" ^ -d "{\"name\":\"Thomas Leroy\",\"email\":\"thomas@example.com\",\"city\":\"Paris\"}" ``` Résultat attendu : **201 Created**. ### Modifier ```bash curl -X PATCH http://127.0.0.1:8000/api/clients/1 ^ -H "Content-Type: application/json" ^ -H "Accept: application/json" ^ -d "{\"name\":\"Jean Dupont Modifié\"}" ``` Résultat attendu : **200 OK**. ### Supprimer ```bash curl -X DELETE http://127.0.0.1:8000/api/clients/1 -H "Accept: application/json" ``` Résultat attendu : **204 No Content**. ### Pagination Ouvrir : `http://127.0.0.1:8000/api/clients?page=1` puis : `http://127.0.0.1:8000/api/clients?page=2` ## Réponses sécurité TP10 1. Dans un vrai CRM, les routes de consultation, création, modification et suppression des clients devraient être protégées car elles manipulent des données privées ou permettent de les modifier. 2. POST est sensible car un utilisateur non autorisé pourrait créer de fausses données dans la base. 3. Cacher un bouton dans l'interface ne sécurise rien : quelqu'un peut appeler directement l'URL de l'API. La vérification doit être faite côté serveur. 4. Une Policy doit être vérifiée dans le contrôleur avant l'opération sensible (par exemple avant `update()` ou `delete()`), une fois l'utilisateur authentifié. ## Codes HTTP à connaître - 200 : requête réussie - 201 : ressource créée - 204 : suppression réussie sans contenu - 404 : client inexistant - 422 : données invalides - 401 : utilisateur non authentifié - 403 : utilisateur authentifié mais non autorisé