Files

141 lines
4.4 KiB
Markdown
Raw Permalink Normal View History

# 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é