5.7 KiB
EME — Emprunt Matériel ENSUP
EME est une application web de gestion des emprunts de matériel pédagogique pour ENSUP / Ensitech.
La V1 cible un parcours contrôlé : les checklists sont préremplies et les opérations sans écart restent automatiques. Toute modification déclarée par l'étudiant alerte un responsable, qui doit la confirmer avant la création d'une anomalie ou la mise à jour de l'état officiel du matériel.
Stack
| Couche | Technologie |
|---|---|
| Frontend | Flutter Web |
| Backend | Express.js + TypeScript |
| Base de données | SQL Server 2022 |
| ORM | Prisma |
| Conteneurs | Docker Compose |
| Interface BDD | Adminer |
Structure
eme_app/
├── compose.yaml
├── CONTEXT.md
├── TODO.md
├── review.md
├── docs/
├── eme-backend/
└── eme-frontend/
Documents utiles :
CONTEXT.md: contexte projet, stack, acteurs, modèle et charte.TODO.md: plan d'action et reste à faire.review.md: journal des décisions et état courant.docs/regles-metier/regles-gestion.md: règles métier validées.
Prérequis
- Docker Desktop
- Node.js + npm
- Flutter SDK avec support Web
- Git
Vérifications rapides :
docker --version
node --version
npm --version
flutter --version
Configuration
Docker
Le fichier racine .env doit fournir le mot de passe SQL Server utilisé par compose.yaml :
MSSQL_SA_PASSWORD=EmePass2026!
Backend
Créer eme-backend/.env à partir de eme-backend/.env.example, puis vérifier que le mot de passe correspond à celui du .env racine.
Exemple de configuration locale :
PORT=3000
NODE_ENV=development
FRONTEND_URL=http://localhost:5000
DATABASE_URL="sqlserver://localhost:1433;database=eme_db;user=sa;password=EmePass2026!;encrypt=true;trustServerCertificate=true"
DB_SERVER=localhost
DB_PORT=1433
DB_NAME=eme_db
DB_USER=sa
DB_PASSWORD=EmePass2026!
AZURE_TENANT_ID=ton_tenant_id
AZURE_CLIENT_ID=ton_client_id
Azure AD n'est pas encore branché en V1 locale : l'authentification est simulée via x-user-email.
Installation
Depuis la racine :
cd eme-backend
npm install
cd ../eme-frontend
flutter pub get
Lancement local
1. Démarrer SQL Server et Adminer
Depuis la racine :
docker compose up -d
Services :
- SQL Server :
localhost:1433 - Adminer :
http://localhost:8081
2. Préparer la base
Depuis eme-backend :
npm run prisma:generate
npx prisma migrate deploy
npm run seed
npm run fixtures
Les fixtures ajoutent des utilisateurs, du matériel, des emprunts et des anomalies de démonstration.
3. Démarrer le backend
Depuis eme-backend :
npm run dev
API :
http://localhost:3000
Contrôle rapide :
curl http://localhost:3000/health
4. Démarrer le frontend
Depuis eme-frontend :
flutter run -d web-server --web-port 5000
Application :
http://localhost:5000
Parcours cible V1
- Ouvrir
http://localhost:5000. - S'identifier avec l'option mail ENSUP ou carte étudiante.
- Cliquer sur
Emprunter. - Sélectionner un matériel disponible.
- Vérifier la checklist de départ préremplie avec l'état de référence.
- Sans modification, l'emprunt démarre automatiquement.
- Si un élément est modifié, le responsable est alerté et confirme ou refuse cet écart avant le départ.
- Au retour, vérifier la checklist automatiquement préremplie avec l'état de départ validé.
- Sans modification, la restitution est clôturée automatiquement.
- Dès qu'un état est modifié, le responsable est alerté et doit confirmer le changement avant l'anomalie et l'état final du matériel.
- La catégorie redevient empruntable après la clôture automatique ou la décision du responsable sur un retour modifié.
Le code actuel gère déjà les parcours automatiques. Il doit encore être adapté au préremplissage de la restitution, à la détection des modifications et à leur confirmation par le responsable ; les tâches sont détaillées dans TODO.md.
Endpoints principaux
| Méthode | Route | Description |
|---|---|---|
GET |
/health |
Santé API |
GET |
/api/auth/me |
Profil utilisateur courant |
GET |
/api/auth/carte/:qr |
Identification par QR code |
GET |
/api/materiels |
Catalogue disponible |
GET |
/api/materiels/:id |
Détail matériel |
POST |
/api/emprunts |
Création d'un emprunt |
GET |
/api/mes-emprunts |
Emprunts en cours de l'utilisateur |
POST |
/api/emprunts/:id/restitution |
Restitution |
En local, les routes protégées utilisent l'en-tête :
x-user-email: lucas.martin@ensitech.eu
Vérifications
Backend :
cd eme-backend
npm run build
npm run lint
Frontend :
cd eme-frontend
flutter analyze
Note : dans l'environnement Codex, flutter analyze et dart format ont déjà bloqué au timeout. Les relancer dans un terminal local Flutter si nécessaire.
État V1
Déjà implémenté :
- catalogue et détail matériel ;
- checklists de départ et de retour ;
- espaces étudiant et responsable ;
- supervision, notifications, anomalies et historique ;
- SSO Microsoft Entra ID prêt à configurer, avec mode démo sécurisé ;
- fixtures de démonstration.
Reste à faire :
- préremplir la restitution avec l'état validé au départ ;
- bloquer les emprunts de même catégorie jusqu'à la clôture du retour ;
- mettre en attente uniquement les checklists modifiées et alerter le responsable ;
- ajouter les écrans responsable de confirmation des écarts ;
- valider le SSO avec les identifiants réels du tenant ENSUP ;
- OpenAPI / Swagger ;
- tests automatisés ;
- documentation utilisateur complète ;
- déploiement production.