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:
parent
6d154ed5fb
commit
246f989bdc
16 changed files with 782 additions and 86 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue