Aller au contenu principal

Projet final

Note sur la rédaction : Ce document utilise le masculin générique dans un souci de simplicité et de lisibilité, sans intention discriminatoire. Tous les rôles et fonctions s'appliquent à toutes les personnes, peu importe leur genre.

Description

Vous devez développer un système complet de gestion de restaurant avec Flutter. Votre application supportera quatre rôles d'utilisateurs différents et fonctionnera pour deux modes d'opération : service sur place (avec serveur) et livraison à domicile (avec livreur).

  • Client : Parcourir le menu, passer des commandes, suivre l'état de sa commande en temps réel, évaluer son expérience
  • Cuisinier : Voir les commandes à préparer, accepter une commande, gérer les étapes de préparation, notifier quand un plat est prêt
  • Gestionnaire : Visualiser un tableau de bord avec les statistiques en temps réel, gérer le menu et les prix, superviser les opérations
  • Livreur/Serveur : Voir les commandes prêtes, accepter une commande, livrer à une adresse client OU servir à une table (avec numéro de table), confirmer la livraison/service

Important : Les équipes choisiront elles-mêmes les fonctionnalités qu'elles souhaitent développer (voir section "Fonctionnalités suggérées" ci-dessous). L'objectif est de créer un système le plus complet et le mieux intégré possible.

Compétition : Les 3 équipes sont en compétition. Un classement final sera établi basé sur la complétude, l'originalité, l'expérience utilisateur et l'innovation technique de votre solution. Le classement n'affecte pas vos notes individuelles mais apporte prestige et reconnaissance.

Le tout doit se faire en simulant l'utilisation sur un téléphone.

Plateforme de développement

  • Flutter pour créer votre solution pour Android et iOS.
  • Vous êtes fortement encouragés à choisir une architecture appropriée pour votre projet (MVC, MVVM, Clean Architecture, etc.) afin de rendre votre application plus robuste à long terme, faciliter les tests et partager mieux les tâches.
  • Vous pouvez développer une seule application avec gestion de rôles, ou plusieurs applications distinctes (une par rôle) selon votre architecture et vos besoins.
  • Rappelez-vous que vous pouvez tester votre développement avec Chrome, mais je vais corriger sur Android et sur iPhone.

Authentification

Vous devrez implémenter un système d'authentification permettant de gérer les différents rôles (Client, Cuisinier, Gestionnaire, Livreur/Serveur). JWT est recommandé pour sa simplicité, mais OAuth (Apple, Google, Facebook) ou d'autres systèmes (authentification par email/mot de passe avec backend custom) sont acceptés. L'important est de pouvoir distinguer et authentifier les différents types d'utilisateurs.

Interface offerte

Votre application doit supporter plusieurs types d'interfaces selon les rôles et contextes d'utilisation :

Interfaces par rôle

  • Client : Téléphone (Pixel 7 Pro ou équivalent pour validation) ou tablette pour service sur place. Interfaces natives Cupertino (iOS) et Material (Android)
  • Cuisinier : Écran grand format (tablette 10-13 pouces ou petit écran TV) pour affichage en cuisine. L'interface doit être lisible à distance et facile à manipuler rapidement
  • Gestionnaire : Interface web complète (navigateur sur ordinateur) ou application mobile responsable
  • Livreur/Serveur : Téléphone (Pixel 7 Pro ou équivalent). Interfaces natives Cupertino (iOS) et Material (Android)

Critères de design

  • Toutes les interfaces doivent être responsives et s'adapter à différentes tailles d'écran
  • Respecter les guidelines de chaque plateforme (Material Design pour Android, Human Interface Guidelines pour iOS)
  • Pour les interfaces web, utiliser un design moderne et ergonomique

Recherche et géolocalisation

  • Vous devez utiliser la géolocalisation pour des fonctionnalités pertinentes à votre système. Par exemple : les clients peuvent trouver les restaurants à proximité, les livreurs peuvent voir les adresses de livraison sur une carte, le gestionnaire peut visualiser les zones de livraison/service, etc.

Affichage de contenu multimédia

  • Afficher plusieurs images de façon efficace (par exemple : photos des plats, images du restaurant, présentation visuelle du menu). Un carrousel d'images est une option parmi d'autres.
  • La présentation de l'application sera évaluée.

Préférences

Offrez une interface de préférences afin que l'utilisateur puisse filtrer les résultats selon ses besoins. Par exemple : filtres alimentaires (végétarien, allergies), fourchette de prix, distance maximale, type de cuisine, etc. Les filtres dépendront des fonctionnalités que vous aurez choisies.

Fonctionnalités suggérées

Vous devez choisir au minimum 16 fonctionnalités à développer. Priorisez une expérience client fluide et complète : un client doit pouvoir passer une commande, suivre sa progression et la recevoir sans friction. Les fonctionnalités des autres rôles (cuisinier, livreur, manager) doivent supporter et enrichir cette expérience principale.

Critère de qualité : Une expérience client polished et bien intégrée vaut mieux qu'un ensemble dispersé de nombreuses fonctionnalités bâclées. L'intégration entre les rôles compte plus que la quantité.

Pour le Client

  • Parcourir le menu avec photos et descriptions des plats
  • Passer une commande (sélection de plats, quantités, options)
  • Choisir le mode : livraison (avec adresse) ou sur place (avec numéro de table)
  • Suivre l'état de sa commande en temps réel (en préparation, prête, en livraison/en service)
  • Payer en ligne (simulation de paiement)
  • Générer et recevoir une facture en PDF par courriel
  • Évaluer le restaurant et les plats après livraison/service
  • Consulter l'historique de ses commandes avec accès aux factures PDF antérieures
  • Gérer ses adresses de livraison favorites
  • Appliquer des codes promotionnels

Pour le Cuisinier

  • Visualiser la file d'attente des commandes à préparer
  • Accepter une commande pour commencer sa préparation
  • Marquer les étapes de préparation (en cours, prêt pour livraison)
  • Notifier automatiquement le livreur quand un plat est prêt
  • Voir le détail complet de chaque commande
  • Gérer plusieurs commandes simultanément avec priorités

Pour le Gestionnaire

  • Tableau de bord avec statistiques en temps réel (nombre de commandes, revenus, temps moyen)
  • Gérer le menu (ajouter/modifier/supprimer des plats, prix, disponibilité)
  • Voir l'ensemble des commandes en cours d'exécution
  • Consulter les évaluations et commentaires des clients
  • Gérer les utilisateurs et leurs rôles
  • Accéder aux archives des factures (recherche, consultation, réenvoi par courriel)* Générer des états de comptes (revenus, dépenses, bilans)* Visualiser des rapports (ventes par jour/semaine/mois, plats populaires)
  • Définir les zones de livraison sur une carte

Pour le Livreur/Serveur

  • Voir la liste des commandes prêtes (à livrer ou à servir)
  • Accepter une commande (livraison ou service en salle)
  • Mode livraison : Navigation GPS vers l'adresse du client, optimiser le trajet pour plusieurs livraisons
  • Mode serveur : Gérer les numéros de tables, voir quelle table a commandé quoi
  • Confirmer la livraison ou le service à la table (avec signature ou photo optionnelle)
  • Voir l'historique de ses livraisons/services
  • Notifier le client de l'arrivée imminente de sa commande

Important : Encouragez l'interconnexion entre les rôles. Par exemple :

  • Mode livraison : Cuisinier termine un plat → Notification automatique au Livreur → Livreur accepte → Client reçoit notification avec tracking GPS en temps réel
  • Mode service sur place : Client commande depuis la table 12 → Cuisinier accepte et prépare → Serveur reçoit notification que table 12 est prête → Serveur livre à la table

Persistance des données

Les données applicatives (commandes, menus, profils utilisateurs, etc.) doivent être enregistrées sur une base de données distante. Vous pouvez utiliser Firebase, un backend custom avec votre propre API, ou toute autre solution de persistance distante.

Images

Pour optimiser les performances et éviter le téléchargement répété des images, vous devez implémenter un système de cache.

Tests d’intégration / unitaires

Un ensemble de tests unitaires doivent être réalisés, adaptés aux fonctionnalités que vous aurez développées. Exemples :

  • Validation du JSON transféré à partir du serveur
  • Logique de sélection et ajout d'éléments (ex: ajout de plats à une commande, mise à jour des quantités)
  • Calculs métier (ex: calcul du total d'une facture, calcul du temps de préparation, calcul de distance)
  • Génération de documents (ex: validation du contenu d'une facture PDF)
  • Tests de validation des données utilisateur

Compétition entre équipes

Les 3 équipes sont en compétition pour créer le meilleur système de gestion de restaurant. À la fin du projet, chaque équipe présentera sa solution devant les autres équipes et un classement final sera établi.

Important : Le classement final apporte prestige et reconnaissance mais n'affecte pas vos notes individuelles. L'évaluation reste basée sur les critères définis dans les sections suivantes.

Critères de classement

  • Complétude : Nombre et qualité des fonctionnalités implémentées
  • Intégration : Qualité de la communication entre les différents rôles et cohérence du flux de travail
  • Expérience utilisateur : Facilité d'utilisation, design, fluidité de navigation
  • Innovation technique : Utilisation créative des technologies, fonctionnalités originales
  • Robustesse : Gestion des erreurs, tests, qualité du code

Remise

On procèdera en mode Sprint, 4 sprints :

  • 9 au 13 février
  • 16 au 20 février
  • 23 février au 27 février
  • 9 au 13 mars (final)

Évaluation lors des sprints

TitreÉvaluation
Qualité du code / Validation du code25%
Qualité des prompts (clarté, spécificité)25%
Tests unitaires et d'intégration25%
Participation dans l'équipe (respect des normes)25%

Critères détaillés :

  • Qualité du code / Validation du code : Structure et architecture, lisibilité, bonnes pratiques, absence de code mort, gestion des erreurs, commentaires et documentation appropriés

  • Qualité des prompts : Prompts clairs, spécifiques et bien structurés. Documentation de quels prompts ont été utilisés, pourquoi, et comment ils ont contribué à la solution

  • Tests unitaires et d'intégration : Couverture adéquate des tests, cas d'erreur couverts, validation du comportement, assertions pertinentes

  • Participation dans l'équipe : Respect des normes de développement, commits réguliers et bien documentés, contribution équitable aux différentes tâches, collaboration et communication

  • La qualité du code ne peut dépasser la note de participation, donc si vous contribuez à 10%, vous pouvez avoir au maximum 10% comme note de qualité du code. Rappelez-vous que j'évalue de façon individuelle, je m'attends que vous fassiez chacun des commits dans l'arbre.

  • Gestion de projet : Je m'attends à ce que vous utilisiez un outil de gestion de projet (ex: Trello, Jira, GitHub Projects) pour suivre l'avancement de votre projet. Vous devez y documenter :

    • les tâches à compléter pour l'équipe (total et pour le sprint en cours),
    • le ou les tâches qui vous sont assingés individuellement,
    • les tâches complétées (par un sprint antérieur),
    • les tâches à complétez pour le prochain sprint (pour chaque membre de l'équipe)

Évaluation du projet

Note individuelle/75
Oral/15
Évaluation des pairs/5
Sprint/55
Sprint 1 (16 février)/5
Sprint 2 (23 février)/10
Sprint 3 (2 mars)/15
Sprint 4 (9 mars)/25
Note de groupe/20
Planification / Modélisation/20

Présentation finale

Chaque équipe disposera de 15 minutes pour démontrer sa solution devant les autres équipes. La démonstration devra montrer le flux complet du système à travers les différents rôles.

L'oral devra être réalisé sur les points suivants :

  1. Démonstration du projet (montrer le flux complet à travers les différents rôles)
  2. Quelle architecture et quelles technologies avez-vous utilisées pour votre développement et pourquoi? Quelles alternatives avez-vous considérées?
  3. Quelles fonctionnalités avez-vous priorisées et pourquoi? Comment avez-vous géré la communication entre les différents rôles d'utilisateurs?
  4. Quelles sont les étapes qui vous ont causées le plus de problème et comment les avez-vous résolu?
  5. Si c'était à refaire, que changeriez-vous dans votre organisation?
  6. Tout autre sujet que vous désirez discuter.