117 lines
6.1 KiB
Markdown
117 lines
6.1 KiB
Markdown
# 🚗 Voitures API Client - Architecture MVC PHP
|
|
|
|
Application web développée en **PHP 8 / HTML5 / CSS3 / JavaScript** suivant le patron de conception **MVC (Modèle - Vue - Contrôleur)**, spécialement adaptée pour consommer l'API REST de gestion de véhicules disponible sur [VoituresApi-API](https://code.erwann-philippe.xyz/wktr/VoituresApi-API).
|
|
|
|
---
|
|
|
|
## 🚀 Connexion à l'API locale
|
|
|
|
- **URL de l'API locale** : `http://localhost:8888`
|
|
- **Fichier de configuration** : `config/config.php`
|
|
- **Authentification** : Jeton Bearer (`Authorization: Bearer <token>` et `X-API-KEY: <token>`) stocké en session après connexion via `POST /auth/login`.
|
|
|
|
### 🔑 Comptes de démonstration préconfigurés dans l'API :
|
|
| Rôle | Identifiant | Mot de passe | Accès |
|
|
|---|---|---|---|
|
|
| **Admin** | `admin` | `adminpassword` | Accès total à tous les véhicules, entretiens et notes |
|
|
| **Utilisateur** | `user` | `userpassword` | Gestion de ses propres véhicules, entretiens et notes |
|
|
|
|
*(Sur la page de connexion `/login`, deux boutons de raccourci permettent de vous connecter en 1 clic avec ces comptes).*
|
|
|
|
---
|
|
|
|
## 📁 Architecture du projet MVC
|
|
|
|
```text
|
|
voituresAPI-Front/
|
|
├── config/
|
|
│ └── config.php # Base URL (http://localhost:8888), timeouts & constantes
|
|
│
|
|
├── public/ # Dossier public exposé par le serveur web
|
|
│ ├── .htaccess # Redirection Apache vers index.php
|
|
│ ├── index.php # Front Controller (point d'entrée unique & déclaration des routes)
|
|
│ └── assets/
|
|
│ ├── css/
|
|
│ │ └── style.css # Feuille de style (plaques style FR, onglets, badges, responsive)
|
|
│ └── js/
|
|
│ └── main.js # Recherche dynamique sans rechargement, alertes flash, confirmations
|
|
│
|
|
├── src/ # Cœur du code MVC
|
|
│ ├── Core/
|
|
│ │ ├── Autoloader.php # Autoloader PSR-4 interne
|
|
│ │ └── Router.php # Routeur HTTP avec regex pour routes dynamiques (/cars/{id}...)
|
|
│ │
|
|
│ ├── Controllers/
|
|
│ │ ├── BaseController.php # Méthodes de rendu, redirections et messages flash
|
|
│ │ ├── AuthController.php # Connexion, inscription et déconnexion via l'API
|
|
│ │ └── CarController.php # CRUD véhicules, relevés km, entretiens et notes
|
|
│ │
|
|
│ ├── Models/
|
|
│ │ └── Car.php # Modèle Car correspondant exactement aux données de l'API
|
|
│ │
|
|
│ ├── Services/
|
|
│ │ └── ApiService.php # Client HTTP cURL (GET, POST, PUT, DELETE, Bearer token)
|
|
│ │
|
|
│ └── Views/
|
|
│ ├── layout/
|
|
│ │ ├── header.php # Navigation, statut connecté/déconnecté, recherche de plaque
|
|
│ │ └── footer.php # Pied de page
|
|
│ ├── cars/
|
|
│ │ ├── index.php # Grille des véhicules, plaques, propriétaires, filtres
|
|
│ │ ├── show.php # Fiche détaillée avec onglets (km, entretiens, notes)
|
|
│ │ └── form.php # Formulaire d'ajout / modification
|
|
│ ├── auth/
|
|
│ │ ├── login.php # Page de connexion avec raccourcis 1-clic admin/user
|
|
│ │ └── register.php# Page d'inscription
|
|
│ └── errors/
|
|
│ └── 404.php # Page d'erreur 404
|
|
│
|
|
├── .gitignore
|
|
└── README.md
|
|
```
|
|
|
|
---
|
|
|
|
## 🛣️ Routes de l'application Front
|
|
|
|
| Méthode | Route | Action correspondante | Accès |
|
|
|---|---|---|---|
|
|
| `GET` | `/` | Page d'accueil & présentation du projet + bouton création | Public |
|
|
| `GET` | `/cars` | Parc automobile complet (`GET /cars`) ou mes véhicules (`GET /cars/mes-voitures`) selon rôle | Authentifié (Admin / User) |
|
|
| `GET` | `/cars?mine=1` | Liste mes véhicules (`GET /cars/mes-voitures`) | Authentifié |
|
|
| `GET` | `/cars?immatriculation=...` | Recherche par plaque (`GET /cars/immatriculation/{plaque}`) | Admin uniquement |
|
|
| `GET` | `/cars/{id}` | Fiche détaillée avec km et entretiens (`GET /cars/{id}`) | Public |
|
|
| `GET` | `/cars/create` | Formulaire d'ajout d'un véhicule | Authentifié (Connexion requise) |
|
|
| `POST`| `/cars/create` | Envoi à l'API (`POST /cars`) | Authentifié |
|
|
| `GET` | `/cars/{id}/edit` | Formulaire d'édition | Propriétaire / Admin |
|
|
| `POST`| `/cars/{id}/edit` | Mise à jour dans l'API (`PUT /cars/{id}`) | Propriétaire / Admin |
|
|
| `POST`| `/cars/{id}/delete`| Suppression (`DELETE /cars/{id}`) | Propriétaire / Admin |
|
|
| `POST`| `/cars/{id}/kilometrage` | Ajout relevé km (`POST /cars/{id}/kilometrage`) | Propriétaire / Admin |
|
|
| `POST`| `/cars/{id}/maintenance` | Ajout entretien (`POST /cars/{id}/maintenance`) | Propriétaire / Admin |
|
|
| `POST`| `/cars/{id}/notes` | Ajout note de suivi (`POST /cars/{id}/notes`) | Propriétaire / Admin |
|
|
| `GET` | `/login` / `POST /login` | Connexion (`POST /auth/login`) avec support de redirection (`?redirect=...`) | Public |
|
|
| `GET` | `/register` / `POST /register` | Inscription (`POST /auth/register`) | Public |
|
|
| `GET` | `/logout` | Déconnexion (`POST /auth/logout`) | Authentifié |
|
|
|
|
---
|
|
|
|
## 🔒 Sécurité & Privilèges (API REST v1.1.0)
|
|
|
|
Conformément à la version **1.1.0** de l'API :
|
|
- **Privatisation de `GET /cars`** : L'accès à la flotte complète est restreint au rôle `admin` (`401` si non authentifié, `403` si `user`). Les utilisateurs accèdent automatiquement à leurs véhicules déclarés (`GET /cars/mes-voitures`).
|
|
- **Privatisation de la recherche d'immatriculation** : `GET /cars/immatriculation/{plaque}` est réservé aux administrateurs.
|
|
- **Page d'accueil dédiée** : Route `/` présentant le projet et disposant d'un appel à l'action pour créer une voiture (orientant les visiteurs non connectés vers la page d'authentification).
|
|
|
|
---
|
|
|
|
## 💻 Démarrage du serveur
|
|
|
|
Assurez-vous que l'API tourne sur `http://localhost:8888`.
|
|
|
|
Lancez le serveur PHP pour le front-end depuis la racine de `voituresAPI-Front` :
|
|
|
|
```powershell
|
|
php -S localhost:8000 -t public
|
|
```
|
|
|
|
Rendez-vous sur votre navigateur à l'adresse : **[http://localhost:8000](http://localhost:8000)**
|