merge: readme v1 docs

This commit is contained in:
SaidSoighiri94
2026-07-15 10:19:17 +02:00
+232
View File
@@ -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.