Ajout du tp 9 et 10 pour l'actualisation du mini-crm
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
# 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é
|
||||
Reference in New Issue
Block a user