đȘ
Boutique en Ligne
Projet intĂ©grateur qui consolide les 8 modules de la formation. Vous allez concevoir le schĂ©ma complet, Ă©crire des requĂȘtes analytiques avancĂ©es, puis exposer les donnĂ©es via une API REST CRUD en PHP (PDO) et Node.js (mysql2).
Schema Design
Jointures complexes
Transactions
Views & CTE
PDO
mysql2
Projet Final
đïž SchĂ©ma de la base
categories (id, nom, description, created_at)
â FK
produits (id, nom, description, prix, stock, categorie_id, actif, created_at, updated_at)
â FK
commande_produits (commande_id, produit_id, quantite, prix_unitaire)
â FK â FK
commandes (id, client_id, statut, total, created_at)
â FK
clients (id, nom, prenom, email UNIQUE, telephone, ville, created_at)
â FK
produits (id, nom, description, prix, stock, categorie_id, actif, created_at, updated_at)
â FK
commande_produits (commande_id, produit_id, quantite, prix_unitaire)
â FK â FK
commandes (id, client_id, statut, total, created_at)
â FK
clients (id, nom, prenom, email UNIQUE, telephone, ville, created_at)
đŠ Livrables attendus
đ schema.sql SQL
- DROP / CREATE DATABASE
- Création des 5 tables avec FK
- Index de performance
- Données de test (jeu complet)
- Vues
v_catalogueetv_stats_clients - Procédure
recalculer_totaux()
đ app.php PHP
- Connexion PDO avec gestion d'erreurs
- Routage manuel via
$_SERVER['REQUEST_URI'] - CRUD produits avec prepared statements
- CRUD catégories
- Endpoint
GET /api/stats - Réponses JSON + codes HTTP corrects
đą app.js Node.js
- Pool mysql2/promise
- Serveur HTTP natif (pas de framework)
- CRUD produits async/await
- CRUD catégories
- Endpoint
GET /api/stats - Gestion des erreurs SQL
đ RequĂȘtes analytiques
- Top 5 produits les plus vendus
- CA mensuel sur 12 mois
- Segmentation clients (VIP/Régulier)
- Produits en rupture de stock
- Taux de conversion par catégorie
đ API REST â Endpoints
| Méthode | URL | Description |
|---|---|---|
| GET | /api/produits | Liste paginée (?page=1&limit=10&cat=1) |
| GET | /api/produits/:id | Détail d'un produit avec sa catégorie |
| POST | /api/produits | Créer un produit (JSON body) |
| PUT | /api/produits/:id | Mettre Ă jour un produit |
| DELETE | /api/produits/:id | Soft delete (actif = 0) |
| GET | /api/categories | Liste des catégories |
| POST | /api/categories | Créer une catégorie |
| GET | /api/stats | KPIs globaux (CA, commandes, clients) |
đ Phases de dĂ©veloppement
1
Conception du schéma SQL
CrĂ©er schema.sql â tables, FK, index, donnĂ©es de test, vues, procĂ©dure stockĂ©e
2
RequĂȘtes analytiques SQL
Top produits, CA mensuel, segmentation clients, stock critique â tester dans MySQL Workbench
3
API PHP (PDO) PHP
ImplĂ©menter app.php â routage, CRUD avec prepared statements, rĂ©ponses JSON
4
API Node.js (mysql2) Node.js
Porter app.php en JavaScript â app.js avec pool mysql2, serveur HTTP natif
5
Tests & validation
Tester tous les endpoints avec curl ou Postman â vĂ©rifier codes HTTP, JSON, gestion des erreurs
â¶ Lancer la solution
# 1. Importer le schéma
mysql -u root -p < solution/schema.sql
# 2. API PHP (XAMPP ou built-in server)
cd solution
php -S localhost:8080
# 3. Tester PHP
curl http://localhost:8080/app.php/api/produits
curl http://localhost:8080/app.php/api/stats
# 4. API Node.js
npm install # mysql2 requis
node app.js # http://localhost:3000
# 5. Tester Node.js
curl http://localhost:3000/api/produits
curl -X POST http://localhost:3000/api/produits \
-H "Content-Type: application/json" \
-d '{"nom":"Nouveau","prix":29.99,"stock":50,"categorie_id":1}'
â CritĂšres de validation
- Toutes les FK sont respectées (pas d'orphelins)
- Les prepared statements sont utilisés partout (pas d'interpolation SQL)
- Les transactions ACID protÚgent les opérations multi-tables
GET /api/produitsretourne{ data: [...], total, page, pages }- Les erreurs retournent le bon code HTTP (400/404/500) et un JSON
{ error: "..." } - La vue
v_catalogueaffiche le prix TTC (TVA 20%) et la disponibilité - La procédure
recalculer_totaux()s'exécute sans erreur