# 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 ` 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