23 Commits

Author SHA1 Message Date
Thomas Fransolet
608231f71c C4 : compression des images à l'upload, 2560 px / JPEG q82
flutter build web vert. Un seul helper, ImageCompressor, appelé par les
DEUX chemins d'upload de resources_screen — c'est le motif qui a fait
diverger Create et Upload côté serveur deux fois de suite : sur
StoragePath en C1, sur le pré-vol de quota en C3.

La compression se fait AVANT resourceCreate, pas avant l'upload. Le
contrôle de quota livré en C3 porte sur sizeBytes à la création : le
faire après aurait fait décider le serveur sur la taille du fichier
d'origine, et compté au quota une image qui n'existe pas. Un quota qui
compte 12x trop se remplit 12x trop vite.

Deux écarts assumés par rapport à l'énoncé « 2560 px / JPEG q82 » :

- Un PNG à canal alpha reste un PNG. Le passer en JPEG remplirait la
  transparence de noir, ce qui abîmerait logos et filigranes. Le
  redimensionnement s'applique dans les deux cas ; seul l'encodage
  diffère, et le type MIME suit — sinon Firebase servirait un JPEG
  étiqueté PNG.
- Si le ré-encodage produit un fichier plus gros que l'original — ce
  qui arrive sur une petite image déjà bien encodée — l'original est
  conservé. Un échec de décodage renvoie aussi l'original plutôt que
  de bloquer l'upload.

Défaut préexistant corrigé au passage : le second chemin d'upload ne
renseignait sizeBytes ni avant ni après. Toutes les ressources créées
par ce chemin comptent donc 0 octet au quota sur l'existant — même
famille que ce que C1 et C3 ont trouvé côté serveur, et un argument de
plus pour le backfill C2.

image 4.2.0 déclarée explicitement : elle était déjà présente en
transitif, dépendre d'un hasard de résolution pour une fonction
utilisateur n'est pas tenable.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 15:52:14 +02:00
Thomas Fransolet
bb4d4fe2d5 Écran Statistiques refondu + Guide IA + onboarding (auth, abonnement) + i18n FR/EN/NL
Statistiques — refonte complète, aucun changement backend
  statistics_screen.dart réécrit (+1832) : barres horizontales monochromes à la place
  des barres verticales tronquées et des deux anneaux, barre de filtres unique avec les
  volumes par canal, règle mono-canal, 4 KPI portant chacun leur variation, bandeau
  « à retenir », courbe en aire avec bandes de week-end. La période précédente s'obtient
  en rappelant le même endpoint.
  statistics_report.dart : export PDF généré côté client (paquet pdf Dart), il partage
  les valeurs calculées de l'écran — un chiffre ne peut pas diverger entre l'écran et le
  document envoyé à la commune. Deux puces du sommaire promettaient des données
  inexistantes (parcours terminés, questions au guide IA), retirées.
  ⚠️ Jamais ouvert dans un navigateur. Cases de test : test-plan.md §8bis / §8ter.

Guide IA
  Screens/GuideIa/guide_ia_screen.dart — onglet Configuration. Menu conditionné à
  isAssistant, le même drapeau que la garde d'AiController. L'onglet « Ce que demandent
  vos visiteurs » n'est pas dans ce commit : le schéma backend est prêt, l'UI non.

Onboarding self-service
  Screens/Auth/ (mot de passe oublié, définition du mot de passe),
  Screens/Billing/subscription_screen.dart, ai_quota_hint.dart.
  ⚠️ Aucun parcours joué de bout en bout — test-plan.md §18.

Parcours guidés
  progression_mode.dart : 9 booléens sur 3 niveaux remplacés par 3 questions.
  Popups GuidedPath / GuidedStep / QuizQuestion mises à jour en conséquence.

Client API (manager_api_new) — édité À LA MAIN, ne pas relancer la génération
  onboarding_api.dart, authentication_api.dart (+80), instance_dto (champs Guide*),
  guided_step / quiz_question_guided_step (flags morts retirés).
  Le // @dart=2.18 manquant dans onboarding_api.dart cassait les 3 apps Flutter d'un
  coup — corrigé ici.

i18n : ~180 clés par langue (FR/EN/NL) + fichiers générés.
Tests : progression_mode_test, statistics_report_test (le second a attrapé deux
plantages qui seraient sortis au premier clic).

flutter build web . flutter analyze : 68 erreurs, toutes dans les fichiers modèle
orphelins de manager_api_new — dette connue, pas une régression, ces fichiers ne sont
pas dans le graphe de compilation.
2026-08-09 22:14:37 +02:00
Thomas Fransolet
a54952e5f4 MISC 2026-07-10 16:54:26 +02:00
Thomas Fransolet
61fd4a44a1 Fix session not working 2025-08-14 23:24:18 +02:00
Thomas Fransolet
edd34ae849 service generation compiling 2025-07-28 16:44:12 +02:00
Thomas Fransolet
7263303b7e Service worker update {{}} - menu working ! + clean code 2025-05-23 15:17:01 +02:00
Thomas Fransolet
e644cd487f misc ! 2025-05-14 17:13:13 +02:00
Thomas Fransolet
fec95bbfe8 Added host and complete url for qr code 2024-02-14 15:17:51 +01:00
Thomas Fransolet
57c7d56306 clean code + accept empty for descriptions 2024-01-16 16:05:43 +01:00
a3a62d1903 Null safety ! 2023-04-01 16:52:13 +02:00
11f5e2860f Search fix + fix pdf generation with special character 2023-03-10 19:25:22 +01:00
3186a0dd8e Update section detail layout (display QRCode and beacon section when isMobile) 2023-02-24 14:54:44 +01:00
ed9c4bfc15 Update openapi generation .. + update code + fix issue on authenticate try on build 2022-12-22 17:30:37 +01:00
0f4fd94735 Fix bugs pdf + article missing information.. 2022-10-23 12:02:21 +02:00
e6e20d1a0e Fix label in french + resolve qrcodes font issue 2022-10-21 17:54:19 +02:00
d30223eb1f Clean code + add icons (mymuseum) 2022-09-14 17:48:58 +02:00
7c594bc82d Remove description for detail screen for article + remove all print.. 2022-09-09 15:33:54 +02:00
98e066c712 PDF QRCode download + code clean 2022-06-23 17:48:02 +02:00
cf7fd02599 Import / export config update 2022-03-25 17:42:09 +01:00
Thomas Fransolet
a69d1aa03f WEB - WIP 2021-11-19 18:54:52 +01:00
Thomas Fransolet
2674233113 Add import/export config + add duration for notification + update service generation (no more detail resource) 2021-08-24 18:07:32 +02:00
Thomas Fransolet
86e4beb362 Remember me + encrypt password in json file ! 2021-07-29 16:14:39 +02:00
Thomas Fransolet
d9fc06b126 WIP session in json file 2021-07-28 18:11:45 +02:00