meteo-exam/README.md
Mathis 6d154ed5fb Météo Exam v0.1.0 — calendrier des évaluations en bulletin météo
- API Express + SQLite : classes, évaluations, SSE, auth Bearer
- Front Vite + TS + Tailwind : frise 7 jours, Exam Cards, modales
- Capacitor Android : APK debug, CapacitorHttp natif
- Seed : classe Terminale S2 (code TERMS2)
2026-10-02 19:51:13 +02:00

109 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Météo Exam
Le calendrier des évaluations scolaires, traduit en bulletin météorologique interactif.
Application Android (Capacitor) + API Node.js.
## Structure
```
meteo-exam/
├── shared/ Types + correspondance type d'éval ↔ météo
├── server/ API Express + SQLite (classes, évaluations, SSE)
├── web/ Front Vite + TypeScript (compilé dans Capacitor)
│ └── android/ Projet Capacitor Android
└── design/prototype/meteo-exam-reference.html Prototype visuel d'origine
```
## Démarrage rapide
### 1. Installer les dépendances
```bash
cd meteo-exam
npm install
```
### 2. Lancer le serveur
```bash
# Base de démonstration (Terminale S2, code d'invitation TERMS2)
npm run seed
# Serveur API (port 8787)
npm run dev:server
```
### 3. Lancer le front en développement
```bash
npm run dev:web
# → http://localhost:5173
```
### 4. Builder l'APK Android
```bash
cd web
npx cap sync android
cd android
./gradlew assembleDebug
# → android/app/build/outputs/apk/debug/app-debug.apk
```
## Comptes de démonstration
| Rôle | Classe | Code | Pseudo |
|------|--------|------|--------|
| Admin | Terminale S2 | `TERMS2` | `Thomas S.` |
| Élève | Terminale S2 | `TERMS2` | n'importe quel |
L'admin peut ajouter / modifier / supprimer les évaluations.
Les élèves consultent et reçoivent les mises à jour en temps réel (SSE).
## Configuration
### Serveur
| Variable | Défaut | Description |
|----------|--------|-------------|
| `PORT` | `8787` | Port d'écoute de l'API |
| `METEO_DB` | `server/data/meteo-exam.db` | Chemin du fichier SQLite |
| `METEO_ORIGINS` | `*` | Origines CORS autorisées (séparez par une virgule) |
### App Android
Dans l'onglet **Plus** de l'app, l'adresse du serveur est configurable.
Sur l'émulateur Android, utilisez `http://10.0.2.2:8787` (l'hôte de la machine).
Sur un téléphone physique, utilisez l'IP locale de la machine qui tourne le serveur.
## API
| Méthode | Route | Accès | Description |
|---------|-------|-------|-------------|
| `POST` | `/api/classes` | public | Créer une classe → `{ token, code, member, klass }` |
| `POST` | `/api/classes/join` | public | Rejoindre via un code |
| `GET` | `/api/classes/me` | membre | Session courante |
| `GET` | `/api/exams?from&to` | membre | Liste des évaluations |
| `POST` | `/api/exams` | admin | Ajouter une évaluation |
| `PATCH` | `/api/exams/:id` | admin | Modifier |
| `DELETE` | `/api/exams/:id` | admin | Supprimer |
| `GET` | `/api/stream` | membre | Flux SSE (ping + exam.created/updated/deleted) |
Authentification : `Authorization: Bearer <token>` ou `?token=` (SSE uniquement).
## Statuts météo
| Icône | Nom | Coefficient | Signification |
|-------|-----|-------------|---------------|
| ☀️ | Grand Soleil | 0 | Aucune évaluation |
| 🌫️ | Brouillard | — | Rumeur non confirmée |
| 💨 | Coup de vent | 1 | Interro surprise, coeff faible |
| 🌩️ | Orage | 2–3 | DS / contrôle continu |
| 🚨 | Alerte Rouge | 4+ | Examen blanc / épreuve commune |
## Phase 2 (prévu)
- Radar de rumeurs (vote communautaire, seuil de conversion 65 %)
- Métriques : pression atmosphérique (coefficient) + indice de vigilance 1-5
- Flash info du jour généré automatiquement
- PWA / service worker