Skip to content

Ymsniper/food-marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🍽 Food Marketplace

Plateforme de commande de repas en ligne avec espace client (Front-Office) et espace administrateur (Back-Office).


🗂 Structure du projet

food-marketplace/
├── config/
│   └── database.php          # Connexion PDO (singleton)
├── database/
│   ├── schema.sql             # Création des tables
│   └── seed.sql               # Données de démonstration
├── includes/
│   ├── auth.php               # Session & helpers d'authentification
│   ├── functions.php          # Utilitaires partagés (JSON, upload…)
│   ├── header-front.php       # Layout header Front-Office
│   ├── footer-front.php       # Layout footer Front-Office
│   ├── header-admin.php       # Layout header Back-Office
│   └── footer-admin.php       # Layout footer Back-Office
├── api/
│   ├── auth/
│   │   ├── login.php          # POST — Connexion
│   │   ├── register.php       # POST — Inscription
│   │   └── logout.php         # GET  — Déconnexion
│   ├── restaurants/
│   │   ├── index.php          # GET  — Liste (search, filtre, pagination)
│   │   ├── show.php           # GET  — Détail + plats
│   │   ├── store.php          # POST — Créer (admin)
│   │   ├── update.php         # POST — Modifier (admin)
│   │   └── destroy.php        # POST — Supprimer (admin)
│   ├── plats/
│   │   ├── index.php          # GET  — Liste filtrée
│   │   ├── store.php          # POST — Créer (admin)
│   │   ├── update.php         # POST — Modifier (admin)
│   │   └── destroy.php        # POST — Supprimer (admin)
│   ├── commandes/
│   │   ├── index.php          # GET  — Liste (admin: toutes | client: les siennes)
│   │   ├── show.php           # GET  — Détail + items
│   │   ├── store.php          # POST — Passer commande
│   │   └── update-status.php  # POST — Changer statut (admin)
│   ├── users/
│   │   ├── index.php          # GET  — Liste clients (admin)
│   │   └── show.php           # GET  — Fiche utilisateur (admin)
│   └── stats/
│       └── index.php          # GET  — KPIs + graphiques (admin)
├── front-office/
│   ├── index.php              # Accueil — liste restaurants
│   ├── restaurant.php         # Détail restaurant + menu
│   ├── checkout.php           # Tunnel de commande
│   ├── login.php              # Page connexion
│   ├── register.php           # Page inscription
│   └── orders.php             # Historique commandes
├── back-office/
│   ├── index.php              # Dashboard KPIs + graphiques
│   ├── restaurants.php        # CRUD restaurants
│   ├── plats.php              # CRUD plats
│   ├── commandes.php          # Gestion commandes
│   └── utilisateurs.php       # Gestion utilisateurs
├── assets/
│   ├── css/
│   │   ├── variables.css      # Tokens CSS (couleurs, typographie…)
│   │   ├── main.css           # Styles globaux Front-Office
│   │   ├── front/
│   │   │   ├── home.css       # Accueil & navbar
│   │   │   ├── restaurant.css # Page restaurant & menu
│   │   │   ├── cart.css       # Drawer panier
│   │   │   └── checkout.css   # Page checkout
│   │   └── admin/
│   │       └── admin.css      # Layout & composants Back-Office
│   └── js/
│       ├── main.js            # Utilitaires partagés (toast, fetch…)
│       ├── front/
│       │   ├── home.js        # Listing & filtres restaurants
│       │   ├── restaurant.js  # Menu & ajout au panier
│       │   ├── cart.js        # État panier (localStorage)
│       │   └── checkout.js    # Tunnel de commande
│       └── admin/
│           ├── main.js        # Utilitaires admin (toast, fetch…)
│           ├── dashboard.js   # KPIs + Chart.js
│           ├── restaurants.js # CRUD restaurants
│           ├── plats.js       # CRUD plats
│           ├── commandes.js   # Gestion commandes
│           └── utilisateurs.js# Gestion utilisateurs
├── uploads/
│   ├── restaurants/           # Images restaurants uploadées
│   └── plats/                 # Photos plats uploadées
├── .htaccess                  # Config Apache (sécurité, réécriture)
└── README.md                  # Ce fichier

⚙️ Installation

Prérequis

  • PHP ≥ 8.0 avec PDO + PDO_MySQL
  • MySQL / MariaDB ≥ 10.4
  • Apache avec mod_rewrite activé (ou Nginx équivalent)

Étapes

1. Cloner / décompresser le projet

# Dans le dossier racine de votre serveur (ex: /var/www/html ou htdocs)
unzip food-marketplace.zip -d food-marketplace

2. Créer la base de données

mysql -u root -p < database/schema.sql
mysql -u root -p food_marketplace < database/seed.sql

3. Configurer la connexion

// config/database.php
define('DB_HOST', 'localhost');
define('DB_NAME', 'food_marketplace');
define('DB_USER', 'root');     // ← modifier
define('DB_PASS', '');         // ← modifier

4. Permissions uploads

chmod -R 755 uploads/
chown -R www-data:www-data uploads/

5. Activer mod_rewrite (Apache)

sudo a2enmod rewrite
sudo systemctl restart apache2

6. Accéder à l'application

  • Front-Office : http://localhost/food-marketplace/front-office/
  • Back-Office : http://localhost/food-marketplace/back-office/

👤 Comptes de démonstration

Rôle Email Mot de passe
Administrateur admin@foodmarket.tn admin123
Client ahmed@mail.tn client123
Client sarra@mail.tn client123

⚠️ Changer les mots de passe avant toute mise en production.


🎯 Fonctionnalités

Front-Office (Client)

  • ✅ Exploration des restaurants avec recherche et filtres par cuisine
  • ✅ Page détail restaurant avec menu catégorisé (Entrées / Plats / Desserts / Boissons)
  • ✅ Panier latéral (drawer) avec gestion des quantités
  • ✅ Tunnel de commande : auth → livraison → paiement → confirmation
  • ✅ 3 modes de paiement : carte, livraison, mobile money
  • ✅ Historique des commandes avec suivi de statut
  • ✅ Inscription / connexion intégrés

Back-Office (Admin)

  • ✅ Dashboard avec KPIs temps réel (ventes jour/mois/année)
  • ✅ Graphiques : courbe CA, histogramme commandes, doughnut par restaurant (Chart.js)
  • ✅ Top 5 / Flop 5 des plats les plus/moins vendus
  • ✅ CRUD complet Restaurants (avec upload image)
  • ✅ CRUD complet Plats (avec upload photo, liaison restaurant)
  • ✅ Gestion des commandes avec changement de statut en temps réel
  • ✅ Gestion des utilisateurs avec fiche détaillée et historique

🛠 Stack technique

Couche Technologie
Backend PHP 8 natif, PDO, sessions
Base de données MySQL / MariaDB
Frontend HTML5, CSS3 (variables CSS), JavaScript ES6+
Graphiques Chart.js 4
Polices Google Fonts (Playfair Display + DM Sans)
Serveur Apache + mod_rewrite

🔐 Sécurité

  • Mots de passe hashés avec password_hash() (bcrypt)
  • Requêtes préparées PDO (protection injection SQL)
  • Validation des rôles sur chaque endpoint API
  • Headers de sécurité HTTP (XSS, clickjacking…)
  • Exécution PHP bloquée dans /uploads/
  • Listing de répertoires désactivé

📝 Remarques de développement

  • Le panier est géré en localStorage côté client.
  • Les APIs retournent du JSON et sont consommées par fetch().
  • La pagination est gérée côté serveur (LIMIT / OFFSET).
  • Les images uploadées sont stockées dans /uploads/restaurants/ et /uploads/plats/.

Projet réalisé dans le cadre du Devoir Surveillé — Technologies et programmation Web — GLSI2

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors