Au démarrage, la configuration météo était illisible
(« Rust type Option<NaiveDateTime> (as SQL type TIMESTAMP) is not compatible
with SQL type TIMESTAMPTZ ») et /api/weather/current renvoyait 500 :
weather_settings.created_at est timestamptz en production alors que
shared/schema.ts et init.sql le déclarent timestamp.
Les types réels de la production ne figurent dans aucune migration du dépôt :
plutôt que de deviner colonne par colonne, chaque colonne timestamp des
structures générées est lue par crate::db::AnyTimestamp(Opt), qui accepte
timestamp et timestamptz (rendu en UTC). Le champ reste NaiveDateTime et la
sérialisation (crate::json::ts, « …Z ») ne change pas.
scripts/gen-rust-schema.ts émet le même attribut #[sqlx(try_from)] ;
schema.rs est modifié à l'identique (62 colonnes).
Non compilé : pas de chaîne Rust sur ce poste.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
En production, 378 anciens produits DLC (ids 260 à 944, créés en 2025) ont
une colonne name à NULL. Le serveur Rust la décodait en String : sqlx
échouait sur ces lignes et toute réponse qui en contenait finissait en 500
(liste vide sans fournisseur choisi, 0 pour Baby délice, Depot, Lidis,
My Candy Shop ; SLS Agency et XMLS n'en ont aucune et s'affichaient).
name devient Option<String> dans DlcProductsRow, comme le générateur le
produit quand il tourne contre la base de production (colonne nullable).
La validation à la création reste inchangée : name y est toujours requis.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
L'ancien serveur gardait les sessions en mémoire : la table sessions de
production n'avait pas la forme attendue (sid, sess, expire) et la
connexion échouait (« column "sid" does not exist »). Au démarrage, une
telle table est renommée (sessions_ancienne_<date>, rien n'est supprimé),
son index aussi, puis la bonne table est créée.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ke2qyS8rgacP3ap5iezDbM
- Serveur Rust (server-rs/, axum + sqlx) : les 148 adresses de l'API,
l'interface, les migrations de démarrage et les tâches de fond ; même
comportement que Node (banc : 2027 cas, 0 écart hors écarts déclarés
USERS-02, RAPPRO-21, R4, R5).
- Node retiré : server/, dépendances serveur, image Docker sans Node
(51 Mo), docker-compose à un seul service applicatif.
- R4 : écritures d'un autre site refusées (Sec-Fetch-Site / Origin).
- R5 : « aujourd'hui » et sauvegarde automatique à l'heure de Paris.
- R6 : mainteneur dans .github/CODEOWNERS.
- Menu latéral : Accueil puis Calendrier en tête.
- Plan et état : docs/PLAN-MIGRATION-RUST.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ke2qyS8rgacP3ap5iezDbM