# 🚗 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 ` et `X-API-KEY: `) 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)**