Marketplace de livraison de nourriture multi-restaurants, développée dans le cadre d'un stage. Inspiré du fonctionnement d'Uber Eats : les clients commandent, les restaurants gèrent leurs commandes en temps réel.
- Ruby 4.0.5
- Ruby on Rails 8.1.3
- PostgreSQL : base de données
- Devise : authentification (clients + restaurants)
- Bootstrap 5 : interface utilisateur
- Hotwire / Turbo : navigation sans rechargement de page
- Solid Queue / Cache / Cable : jobs, cache et WebSocket natifs Rails 8
- Inscription / connexion
- Parcourir les restaurants et leurs menus
- Panier persistant en session
- Commande avec choix du mode de paiement (espèces, carte, mobile)
- Suivi de commande en temps réel
- Consultation du reçu
- Laisser un avis après livraison
- Inscription / connexion
- Dashboard avec onglets : Commandes / Historique / Revenus / Menu
- Gestion du cycle de vie des commandes (confirmer → préparer → envoyer → livrer)
- Génération automatique du reçu au départ en livraison
- Gestion des livreurs
- Vue des revenus par jour / mois / total
- Ruby 4.0+
- PostgreSQL
- Bundler (
gem install bundler)
# Cloner le repo
git clone https://github.com/Malikabana/p1.git
cd p1
# Installer les dépendances
bundle install
# Créer et migrer la base de données
rails db:create db:migrate
# Charger les données de test
rails db:seed
# Lancer le serveur
rails serverL'application est accessible sur http://localhost:3000
| Rôle | Mot de passe | |
|---|---|---|
| Client | client@test.com | client123 |
| Restaurant | amadou@test.com | amadou123 |
| Restaurant | napoli@test.com | napoli123 |
| Restaurant | burger@test.com | burger123 |
| Restaurant | wok@test.com | wok123 |
Le projet suit l'architecture MVC de Rails :
app/
├── controllers/ # Reçoivent les requêtes HTTP, orchestrent la logique
├── models/ # Logique métier, validations, interactions avec la DB
└── views/ # Templates HTML (ERB)
db/
├── migrate/ # Historique des modifications de la base de données
└── schema.rb # État actuel de la base de données
config/
└── routes.rb # Définition de toutes les URLs de l'application
Customer ──── Order ──── OrderItem ──── MenuItem
│ │
│ Restaurant
├── Payment (STI : Card / Cash / Mobile)
├── Receipt
└── Review
- Devise pour l'authentification : supporte deux modèles simultanés (Customer + Restaurant) via des scopes Warden séparés
- STI (Single Table Inheritance) pour les paiements : une seule table
paymentsavec trois types (CardPayment, CashOnDelivery, MobilePayment) - Machine à états manuelle sur les commandes : transitions explicites avec vérification du statut courant
- Callbacks ActiveRecord : génération du reçu et confirmation du paiement déclenchées automatiquement lors des transitions d'état
includesimbriqués : prévention des N+1 queries sur le dashboard