237 lines
5.7 KiB
Markdown
237 lines
5.7 KiB
Markdown
# 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
|
|
|
|
```text
|
|
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 :
|
|
|
|
```bash
|
|
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` :
|
|
|
|
```env
|
|
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 :
|
|
|
|
```env
|
|
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 :
|
|
|
|
```bash
|
|
cd eme-backend
|
|
npm install
|
|
cd ../eme-frontend
|
|
flutter pub get
|
|
```
|
|
|
|
## Lancement local
|
|
|
|
### 1. Démarrer SQL Server et Adminer
|
|
|
|
Depuis la racine :
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
Services :
|
|
|
|
- SQL Server : `localhost:1433`
|
|
- Adminer : `http://localhost:8081`
|
|
|
|
### 2. Préparer la base
|
|
|
|
Depuis `eme-backend` :
|
|
|
|
```bash
|
|
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` :
|
|
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
API :
|
|
|
|
```text
|
|
http://localhost:3000
|
|
```
|
|
|
|
Contrôle rapide :
|
|
|
|
```bash
|
|
curl http://localhost:3000/health
|
|
```
|
|
|
|
### 4. Démarrer le frontend
|
|
|
|
Depuis `eme-frontend` :
|
|
|
|
```bash
|
|
flutter run -d web-server --web-port 5000
|
|
```
|
|
|
|
Application :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```http
|
|
x-user-email: lucas.martin@ensitech.eu
|
|
```
|
|
|
|
## Vérifications
|
|
|
|
Backend :
|
|
|
|
```bash
|
|
cd eme-backend
|
|
npm run build
|
|
npm run lint
|
|
```
|
|
|
|
Frontend :
|
|
|
|
```bash
|
|
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.
|