Plateforme centralisée pour le campus INPT regroupant la gestion de la buvette, le suivi des présences, la carte restaurant, les rapports de maintenance et les actualités du campus.
Disponible en application web (React + TypeScript) et application mobile (Flutter), toutes deux connectées à une API REST (FastAPI + SQLite).
SMART_CAMPUS/
├── frontend/ # Application web — React + TypeScript
│ ├── src/
│ │ └── app/
│ │ ├── pages/ # Pages par rôle (student, professor, cafeteria, admin, maintenance)
│ │ ├── components/ # Composants réutilisables
│ │ ├── context/ # Auth context (React Context API)
│ │ └── api.ts # Client HTTP centralisé
│ ├── index.html
│ ├── vite.config.ts
│ └── package.json
├── backend/ # API REST — FastAPI + SQLite
│ ├── main.py # Routes et logique métier
│ ├── models.py # Modèles SQLAlchemy
│ ├── schemas.py # Schémas Pydantic
│ ├── auth.py # JWT, bcrypt, TOTP
│ └── seed.py # Données initiales
└── mobile/ # App mobile — Flutter
└── lib/
├── screens/ # Écrans par rôle
├── services/ # AppState (Provider) + client API
├── models/ # Modèles Dart
└── theme/ # Thème Material
Écran
Description
Dashboard
Solde carte restaurant, résumé des absences du jour, dernières commandes
Buvette
Parcourir le menu par catégorie, ajouter au panier, passer commande — le solde est déduit immédiatement
Mes commandes
Historique avec statut (en attente, en préparation, prête, retirée) et QR code de retrait
Présences
Scanner le QR code du professeur pour pointer ; historique par cours
Recharge
Recharger sa carte via virement, espèces ou carte bancaire ; historique des transactions
Maintenance
Soumettre un rapport de panne (titre, lieu, catégorie, priorité) ; suivre ses rapports
Actualités
Annonces et événements du campus, articles épinglés en tête de liste
Écran
Description
Mes cours
Liste des cours assignés avec horaires et effectifs
Session de présence
Démarrer une session → afficher le QR code TOTP (rotation toutes les 30 s) → voir les présents en temps réel
Écran
Description
Commandes
Tableau Kanban : en attente → en préparation → prête
Scanner QR
Scanner le QR de l'étudiant pour valider le retrait
Gestion du menu
Ajouter / modifier des articles, activer/désactiver, gérer les stocks
Écran
Description
Rapports
Liste filtrables par statut (ouvert, en cours, résolu) et catégorie
Prise en charge
Assigner, changer le statut, ajouter un commentaire
Écran
Description
Utilisateurs
Consulter tous les comptes, modifier les soldes
Commandes / Rapports
Vue globale
Actualités
Créer, modifier, épingler ou supprimer des annonces
Professeur Backend Étudiant
│── POST /attendance/session ──▶│ │
│◀── { sessionId, secret } ─────│ │
│ Affiche QR: "SESSION_ID:TOKEN" (HMAC-SHA1, rotation 30s) │
│ │◀── POST /attendance/scan ─────│
│ │── valide TOTP → présence ─────│
Token expiré (> 30 s) rejeté. Un étudiant ne peut pointer qu'une fois par session.
Étudiant Backend Caissier
│── POST /orders ────────────▶│ │
│◀── QR: { orderId, token, amount } ──────────────────────────│
│ (solde déjà déduit) │◀── PATCH /orders/:id/status ──│
│ │── commande → retirée ─────────│
cd backend
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
venv/bin/uvicorn main:app --reload
API : http://localhost:8001
Docs Swagger : http://localhost:8001/docs
La base SQLite est créée et peuplée automatiquement au premier démarrage.
cd frontend
npm install
npm run dev
Accès : http://localhost:5173
Créer frontend/.env :
VITE_API_URL = http://localhost:8001/api
3. Application mobile (Flutter)
cd mobile
flutter pub get
flutter run
Configurer l'URL dans lib/services/config.dart :
const String kApiBase = 'http://10.0.2.2:8001/api' ; // émulateur Android
const String kApiBase = 'http://192.168.x.x:8001/api' ; // appareil physique
Rôle
ID
Mot de passe
Étudiant
s001 / s002 / s003
password
Professeur
p001 / p002
password
Buvette
c001
password
Maintenance
m001
password
Admin
a001
password
Couche
Technologies
Frontend web
React 18, TypeScript, Vite, React Router v7, Tailwind CSS, shadcn/ui
Backend
Python 3, FastAPI, SQLAlchemy, SQLite, JWT (python-jose), bcrypt, Pydantic v2
Mobile
Flutter / Dart (SDK ≥ 3.0), Provider, go_router, qr_flutter, mobile_scanner
API — Endpoints principaux
Méthode
Route
Rôle
Description
POST
/api/auth/login
—
Connexion → token JWT
GET
/api/auth/me
tous
Utilisateur courant
GET
/api/menu
tous
Liste du menu
POST
/api/orders
étudiant
Passer une commande
PATCH
/api/orders/:id/status
buvette
Changer le statut
POST
/api/attendance/session
professeur
Démarrer une session
POST
/api/attendance/scan
étudiant
Pointer sa présence
POST
/api/maintenance
étudiant
Soumettre un rapport
PATCH
/api/maintenance/:id/status
maintenance
Mettre à jour un rapport
POST
/api/recharge
étudiant
Recharger la carte
GET
/api/news
tous
Actualités
GET
/api/users
admin
Liste des utilisateurs
PATCH
/api/users/:id/balance
admin
Modifier le solde
Documentation complète : http://localhost:8001/docs