Files
EME_APP/README.md
T
2026-07-24 13:41:40 +02:00

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

  1. Ouvrir http://localhost:5000.
  2. S'identifier avec l'option mail ENSUP ou carte étudiante.
  3. Cliquer sur Emprunter.
  4. Sélectionner un matériel disponible.
  5. Vérifier la checklist de départ préremplie avec l'état de référence.
  6. Sans modification, l'emprunt démarre automatiquement.
  7. Si un élément est modifié, le responsable est alerté et confirme ou refuse cet écart avant le départ.
  8. Au retour, vérifier la checklist automatiquement préremplie avec l'état de départ validé.
  9. Sans modification, la restitution est clôturée automatiquement.
  10. 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.
  11. 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.