diff --git a/README.md b/README.md new file mode 100644 index 0000000..b611fa4 --- /dev/null +++ b/README.md @@ -0,0 +1,232 @@ +# EME — Emprunt Matériel ENSUP + +EME est une application web de gestion des emprunts de matériel pédagogique pour ENSUP / Ensitech. + +La V1 couvre le parcours étudiant : consulter le catalogue, emprunter un matériel, restituer un emprunt et détecter automatiquement les retours non conformes. + +## 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 de démo 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. Valider la checklist de départ. +6. Vérifier la confirmation de l'emprunt. +7. Revenir à l'accueil. +8. Cliquer sur `Restituer`. +9. Sélectionner un emprunt en cours. +10. Valider un retour conforme ou indiquer un élément absent/détérioré. +11. Vérifier le résultat conforme ou non conforme. + +## 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 + +Terminé pour la V1 étudiant : + +- catalogue matériel ; +- détail matériel ; +- emprunt avec checklist de départ ; +- restitution avec checklist de retour ; +- détection automatique de retour non conforme ; +- fixtures de démonstration ; +- tests runtime manuels du parcours étudiant. + +Reste à faire : + +- authentification Azure AD réelle ; +- parcours responsable matériel ; +- OpenAPI / Swagger ; +- tests automatisés ; +- documentation utilisateur complète ; +- déploiement production.