v0.2.0 — config admin (météo forcée, flash info, édition classe) + PWA

- DB : table day_weather (override admin par jour), flash_message sur classes
- API : PUT/DELETE /api/config/day-weather, PUT /api/config/flash, PATCH /api/config/class
- SSE : day_weather.updated/deleted, flash.updated, class.updated
- Front : bandeau flash info, indicateur 'forcé' sur la frise, modale météo admin
- Onglet Plus : panneau admin (flash info + édition classe), tout admin modifiable
- PWA : manifest.webmanifest, service worker, meta Apple, icônes 192/512
- Web version accessible sur iOS via Safari (Ajouter à l'écran d'accueil)
This commit is contained in:
Mathis 2026-10-04 17:05:56 +02:00
parent 6d154ed5fb
commit 246f989bdc
16 changed files with 782 additions and 86 deletions

View file

@ -146,6 +146,8 @@ export interface ClassInfo {
id: number
name: string
level: string | null
/** Message d'annonce du jour (flash info), lu par tous les membres. */
flashMessage: string | null
}
export interface Member {
@ -165,11 +167,31 @@ export interface ApiError {
error: string
}
/** Override météo posé par l'admin pour un jour donné (clé locale AAAA-MM-JJ). */
export interface DayWeather {
classId: number
dayKey: string
kind: WeatherKind
updatedAt: string
}
/** Flash info : message quotidien rédigé par l'admin. */
export interface FlashInfo {
classId: number
/** null = pas de message publié. */
message: string | null
updatedAt: string
}
/** Payloads émis par le flux SSE. */
export type StreamEvent =
| { type: 'exam.created'; exam: Exam }
| { type: 'exam.updated'; exam: Exam }
| { type: 'exam.deleted'; examId: number }
| { type: 'day_weather.updated'; dayWeather: DayWeather }
| { type: 'day_weather.deleted'; dayKey: string }
| { type: 'flash.updated'; flash: FlashInfo | null }
| { type: 'class.updated'; klass: ClassInfo }
| { type: 'ping' }
export const CLASS_CODE_LENGTH = 6