141 lines
4.4 KiB
Markdown
141 lines
4.4 KiB
Markdown
# 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é
|