From 18c4587d6921919ce0fd0a7cd8fc33e8ea3f7099 Mon Sep 17 00:00:00 2001 From: Amadou Date: Sat, 1 Aug 2026 17:07:09 -0400 Subject: [PATCH] vault backup: 2026-08-01 17:07:09 --- ... de projet - Content Publication Engine.md | 147 +++++++------- ... sites- proposition de publication JSON.md | 28 ++- ...chitecture - Content Publication Engine.md | 189 ++++++++++++++++-- 3 files changed, 276 insertions(+), 88 deletions(-) diff --git a/20 Work/Ideas/Mogador/Charte de projet - Content Publication Engine.md b/20 Work/Ideas/Mogador/Charte de projet - Content Publication Engine.md index 7be492f..d71be03 100644 --- a/20 Work/Ideas/Mogador/Charte de projet - Content Publication Engine.md +++ b/20 Work/Ideas/Mogador/Charte de projet - Content Publication Engine.md @@ -1,86 +1,85 @@ - ## Responsable A confirmer. Responsables pressentis: -- Sponsor: Amadou Ndiaye -- Responsable produit/metier: Julie Bessière -- Responsable execution: Joel Ymele -- Equipe contributrice: SN, infra, edimestres, PCI, fournisseurs sites +- Sponsor: CTO / Direction technique +- Responsable produit/métier: Direction production / édition numerique +- Responsable execution: Manager équipe web / Tech lead +- Équipe contributrice: developpeurs web, infra, édimestres, PCI, fournisseurs sites ## Resultat attendu -Quand ce projet reussit, la publication des donnees issues de Louise/Mogador vers les sites TFO, IDELLO, ONFR et lineaire devient plus fiable, plus observable et plus rapide. +Quand ce projet réussit, la publication des données issues de Louise/Mogador vers les sites TFO, IDELLO, ONFR et linéaire devient plus fiable, plus observable et plus rapide. Concretement: -- on ne depend plus de trois serveurs separes qui executent chacun une copie de la meme synchro; -- les sites consomment des fichiers JSON publics, versionnes et atomiques; -- les erreurs sont detectees avant les plaintes de production; -- les corrections d'urgence sont possibles via une interface interne controlee; -- l'etat des videos JWP est integre proprement sans demander a PCI de connaitre JWP; -- Directus peut etre retire ou reduit si son role n'est plus necessaire; +- on ne depend plus de trois serveurs séparés qui executent chacun une copie de la même synchro; +- les sites consomment des fichiers JSON publics, versionnés et atomiques; +- les erreurs sont détectées avant les plaintes de production; +- les corrections d'urgence sont possibles via une interface interne contrôlee; +- l'état des vidéos JWP est intégré proprement sans demander à PCI de connaitre JWP; +- Directus peut être retiré ou reduit si son rôle n'est plus nécessaire; - l'architecture reste compatible avec une future API Louise/Mogador v2 fournie par PCI. ## Valeur d'affaires -Le systeme actuel fonctionne, mais il est fragile, lent a operer et difficile a expliquer. Il cree un risque direct sur la mise en ligne des emissions, particulierement quand une programmation doit apparaitre a une heure precise. +Le système actuel fonctionne, mais il est fragile, lent a operer et difficile a expliquer. Il crée un risque direct sur la mise en ligne des emissions, particulierement quand une programmation doit apparaitre a une heure précise. -Ce projet vise a reduire: +Ce projet vise a réduire: - les incidents de publication; - les retards de mise en ligne; - les interventions manuelles non tracees; -- la dependance operationnelle a Directus pour des usages qu'il ne sert pas bien; -- la complexite des relations collection/saison/episode; -- la duplication entre TFO, IDELLO, ONFR et lineaire; -- la dependance a une API Mogador legacy lente ou limitee. +- la dépendance opérationnelle à Directus pour des usages qu'il ne sert pas bien; +- la complexite des relations collection/saison/épisode; +- la duplication entre TFO, IDELLO, ONFR et linéaire; +- la dépendance à une API Mogador legacy lente ou limitée. -La valeur principale est operationnelle: publier de facon previsible, auditable et recuperable. +La valeur principale est opérationnelle: publier de façon previsible, auditable et reçuperable. -La valeur secondaire est strategique: preparer une transition future vers une API Louise/Mogador v2 ou des evenements PCI sans devoir recommencer l'architecture. +La valeur secondaire est strategique: preparer une transition future vers une API Louise/Mogador v2 ou des événements PCI sans devoir recommencer l'architecture. ## Definition de termine -- [ ] Le `Content Publication Engine` genere les JSON publics pour au moins une plateforme pilote. -- [ ] Les JSON sont publies en runs immuables avec un `manifest.json` actif. -- [ ] Le systeme supporte les produits, collections, programmations, `today`, `latest`, recherche/index et programmations futures jusqu'a J+10. -- [ ] Le `Media Pipeline` alimente une table `media_assets` avec l'etat JWP. +- [ ] Le `Content Publication Engine` génère les JSON publics pour au moins une plateforme pilote. +- [ ] Les JSON sont publiés en runs immuables avec un `manifest.json` actif. +- [ ] Le système supporte les produits, collections, programmations, `today`, `latest`, recherche/index et programmations futures jusqu'à J+10. +- [ ] Le `Media Pipeline` alimente une table `media_assets` avec l'état JWP. - [ ] Le contrat `publication_jobs` permet de republier un produit, une collection, un horaire ou une plateforme. -- [ ] Les corrections d'urgence passent par une `Publication Console` interne avec authentification, roles et audit. -- [ ] Un rapport compare ce qui est attendu selon Louise/Mogador et ce qui a ete publie. +- [ ] Les corrections d'urgence passent par une `Publication Console` interne avec authentification, rôles et audit. +- [ ] Un rapport compare ce qui est attendu selon Louise/Mogador et ce qui a été publié. - [ ] Des alertes sont envoyees en cas d'anomalie critique. -- [ ] Un rollback peut etre fait en repointant le `manifest.json` vers un run precedent. -- [ ] Une documentation existe pour les JSON, les schemas, les operations, les alertes et le rollback. -- [ ] Un pilote est valide avec production, edition, infra et au moins un fournisseur/site consommateur. +- [ ] Un rollback peut être fait en repointant le `manifest.json` vers un run précédent. +- [ ] Une documentation existe pour les JSON, les schemas, les opérations, les alertes et le rollback. +- [ ] Un pilote est valide avec production, édition, infra et au moins un fournisseur/site consommateur. ## Portee ### Inclus -- Analyse et formalisation des regles de publication actuelles. +- Analyse et formalisation des règles de publication actuelles. - Creation du `Content Publication Engine`. -- Generation des JSON publics versionnes. +- Generation des JSON publics versionnés. - Gestion des runs et retention. - Generation du `manifest.json`. -- Support des programmations futures jusqu'a J+10. +- Support des programmations futures jusqu'à J+10. - Creation du contrat `media_assets`. - Creation du contrat `publication_jobs`. - Integration avec le `Media Pipeline` AdonisJS/JWP. - Mini CMS interne, ou `Publication Console`, pour les corrections d'urgence. -- Authentification et roles pour edimestres/admins internes. +- Authentification et rôles pour édimestres/admins internes. - Rapports de validation attendu vs publie. -- Alertes operationnelles. -- Documentation technique et operationnelle. +- Alertes opérationnelles. +- Documentation technique et opérationnelle. - Pilote sur une plateforme. - Strategie de migration progressive depuis Directus. ### Exclu -- Refonte complete de Louise. +- Refonte complète de Louise. - Suppression immediate de Mogador Toolkit. - Livraison d'une API Louise/Mogador v2 par PCI. - Publication directe depuis Louise vers les sites. @@ -94,7 +93,7 @@ La valeur secondaire est strategique: preparer une transition future vers une AP |Jalon|Cible|Statut| |---|---|---| -|Charte validee|A definir|Brouillon| +|Charte validée|À définir|Brouillon| |Contrats `media_assets` et `publication_jobs` valides|Semaine 1|A faire| |Prototype JSON local valide|Semaines 2-3|A faire| |Integration Media Pipeline minimale|Semaines 3-4|A faire| @@ -102,62 +101,62 @@ La valeur secondaire est strategique: preparer une transition future vers une AP |Rapports et alertes pilote|Semaines 6-7|A faire| |Publication bucket/CDN de test|Semaines 7-8|A faire| |Publication Console minimale|Semaines 8-10|A faire| -|Validation production/edition/infra|Semaines 10-11|A faire| +|Validation production/édition/infra|Semaines 10-11|A faire| |Decision de generalisation|Semaine 12|A faire| ## Dependances |Dependance|Responsable|Requis pour|Statut| |---|---|---|---| -|Acces export Louise/Mogador actuel|Interne / Infra|Snapshot source|Existant| +|Accès export Louise/Mogador actuel|Interne / Infra|Snapshot source|Existant| |Mogador Toolkit actuel|Interne / PCI|Lecture officielle initiale|Existant, fragile| -|App AdonisJS/JWP|Tech lead / equipe web|Etat media JWP|A integrer| -|Acces JWP|Equipe web / Infra|Media Pipeline|A confirmer| -|Bucket/CDN|Infra|Publication JSON|A definir| -|Auth interne|Infra / equipe web|Publication Console|A definir| -|Better Stack / alerting|Infra / equipe web|Alertes|En cours / a confirmer| +|App AdonisJS/JWP|Tech lead / équipe web|Etat media JWP|A intégrer| +|Accès JWP|Équipe web / Infra|Media Pipeline|A confirmer| +|Bucket/CDN|Infra|Publication JSON|À définir| +|Auth interne|Infra / équipe web|Publication Console|À définir| +|Better Stack / alerting|Infra / équipe web|Alertes|En cours / a confirmer| |Validation production|Production|Definition des anomalies critiques|A planifier| -|Validation edimestres|Edition numerique|Corrections d'urgence|A planifier| -|Decision sur Directus|CTO / equipe web|Strategie migration|A prendre| +|Validation édimestres|Edition numerique|Corrections d'urgence|A planifier| +|Decision sur Directus|CTO / équipe web|Strategie migration|A prendre| |Discussion PCI API v2|CTO / PCI|Evolution long terme|Separe| ## Risques |Risque|Probabilite|Impact|Reponse|Responsable| |---|---|---|---|---| -|Le projet devient trop large et tente de remplacer Directus, Mogador, JWP et les sites en meme temps|Elevee|Eleve|Decouper en pilote, garder API PCI comme chantier separe, livrer par increments|Sponsor / Tech lead| -|L'equipe manque de disponibilite pour un projet d'architecture|Elevee|Eleve|Limiter le MVP, choisir une plateforme pilote, documenter les arbitrages|Manager / Tech lead| -|Les regles metier actuelles sont implicites dans le vieux code|Elevee|Eleve|Extraire les regles, valider avec production, ajouter rapports de comparaison|Equipe web| +|Le projet devient trop large et tente de remplacer Directus, Mogador, JWP et les sites en même temps|Élevée|Eleve|Decouper en pilote, garder API PCI comme chantier séparé, livrer par increments|Sponsor / Tech lead| +|L'équipe manque de disponibilite pour un projet d'architecture|Élevée|Eleve|Limiter le MVP, choisir une plateforme pilote, documenter les arbitrages|Manager / Tech lead| +|Les règles métier actuelles sont implicites dans le vieux code|Élevée|Eleve|Extraire les règles, valider avec production, ajoutér rapports de comparaison|Équipe web| |Les sites consommateurs ont des besoins differents ou non documentes|Moyenne|Eleve|Publier JSON schemas, faire valider les formats avec chaque fournisseur/site|Manager / fournisseurs sites| -|La Publication Console recree un mini Directus trop complexe|Moyenne|Eleve|Limiter aux overrides d'urgence, audit, preview et publication; ne pas refaire un CMS complet|Product / Tech lead| -|Les corrections d'urgence entrent en conflit avec Louise au prochain export|Elevee|Eleve|Definir precedence, expiration d'override, audit et rapport d'ecart|Equipe web / edition| -|Le `manifest.json` est cache trop longtemps|Moyenne|Eleve|TTL court sur manifest, runs immuables caches longuement, procedure de purge CDN|Infra / equipe web| -|La publication atomique est mal implementee|Moyenne|Eleve|Publier d'abord un run complet, valider, puis seulement changer le manifest|Equipe web| -|La gestion des programmations futures J+10 augmente le volume et la complexite|Moyenne|Moyen|Limiter explicitement a J+10, mesurer performance, eviter requetes par episode|Equipe web| -|Le Media Pipeline et le Sync Engine se couplent trop fortement|Moyenne|Eleve|Passer uniquement par `media_assets` et `publication_jobs`, eviter les appels directs obligatoires|Tech lead| -|JWP est lent ou indisponible pendant une publication|Moyenne|Eleve|Publier statut media explicite, alerter, retry, ne pas bloquer tout le run si un media est en erreur|Equipe web| -|Le systeme publie un JSON incomplet mais valide techniquement|Moyenne|Eleve|Ajouter validations metier, rapports attendu vs publie et seuils bloquants|Equipe web / production| -|L'absence d'API PCI v2 maintient certaines lenteurs|Elevee|Moyen|Concevoir le `Source Reader` remplacable et optimiser avec snapshots/diffs internes|Equipe web| -|PCI ne livre pas d'events/webhooks a court terme|Elevee|Moyen|Ne pas en faire une dependance du MVP; garder le polling 3h et overrides internes|Sponsor| -|Infra refuse l'exposition de l'app interne|Moyenne|Moyen|Exposer seulement les JSON via bucket/CDN; garder la console sur reseau interne|Infra| -|Les permissions edimestres sont sous-estimees|Moyenne|Moyen|Definir roles simples, audit obligatoire, environnement interne seulement|Edition / equipe web| +|La Publication Console recrée un mini Directus trop complexe|Moyenne|Eleve|Limiter aux overrides d'urgence, audit, preview et publication; ne pas refaire un CMS complet|Product / Tech lead| +|Les corrections d'urgence entrent en conflit avec Louise au prochain export|Élevée|Eleve|Definir precedence, expiration d'override, audit et rapport d'ecart|Équipe web / édition| +|Le `manifest.json` est cache trop longtemps|Moyenne|Eleve|TTL court sur manifest, runs immuables cachés longuement, procedure de purge CDN|Infra / équipe web| +|La publication atomique est mal implementee|Moyenne|Eleve|Publier d'abord un run complet, valider, puis seulement changer le manifest|Équipe web| +|La gestion des programmations futures J+10 augmente le volume et la complexite|Moyenne|Moyen|Limiter explicitement a J+10, mesurer performance, éviter requetes par épisode|Équipe web| +|Le Media Pipeline et le Sync Engine se couplent trop fortement|Moyenne|Eleve|Passer uniquement par `media_assets` et `publication_jobs`, éviter les appels directs obligatoires|Tech lead| +|JWP est lent ou indisponible pendant une publication|Moyenne|Eleve|Publier statut media explicite, alerter, retry, ne pas bloquer tout le run si un media est en erreur|Équipe web| +|Le système publie un JSON incomplet mais valide techniquement|Moyenne|Eleve|Ajouter validations métier, rapports attendu vs publie et seuils bloquants|Équipe web / production| +|L'absence d'API PCI v2 maintient certaines lenteurs|Élevée|Moyen|Concevoir le `Source Reader` remplacable et optimiser avec snapshots/diffs internes|Équipe web| +|PCI ne livre pas d'events/webhooks à court terme|Élevée|Moyen|Ne pas en faire une dépendance du MVP; garder le polling 3h et overrides internes|Sponsor| +|Infra refuse l'exposition de l'app interne|Moyenne|Moyen|Exposer seulement les JSON via bucket/CDN; garder la console sur réseau interne|Infra| +|Les permissions édimestres sont sous-estimees|Moyenne|Moyen|Definir rôles simples, audit obligatoire, environnement interne seulement|Edition / équipe web| |Migration depuis Directus cause une interruption|Moyenne|Eleve|Double-run, comparaison, pilote, rollback, aucun big bang|Tech lead / Infra| -|Les couts operationnels du bucket/CDN/logs augmentent|Faible|Moyen|Retention limitee, monitoring taille, lifecycle policies|Infra| -|Le choix Laravel vs AdonisJS devient un debat bloquant|Moyenne|Moyen|Decider selon maintenabilite, separer contrat et implementation, timeboxer la decision|CTO / Tech lead| +|Les couts opérationnels du bucket/CDN/logs augmentent|Faible|Moyen|Retention limitée, monitoring taille, lifecycle policies|Infra| +|Le choix Laravel vs AdonisJS devient un debat bloquant|Moyenne|Moyen|Decider selon maintenabilite, séparer contrat et implementation, timeboxer la décision|CTO / Tech lead| ## Sante actuelle Jaune. -Le besoin est clair et la direction technique est raisonnable, mais le projet touche plusieurs systemes critiques: Louise/Mogador, Directus, JWP, sites consommateurs, infra, edition et production. Le principal risque n'est pas technique pur; c'est la portee. +Le besoin est clair et la direction technique est raisonnable, mais le projet touche plusieurs systèmes critiques: Louise/Mogador, Directus, JWP, sites consommateurs, infra, édition et production. Le principal risque n'est pas technique pur; c'est la portée. ## Statut actuel -Une proposition d'architecture Sync v2 existe. Une suite precise maintenant la separation entre: +Une proposition d'architecture Sync v2 existe. Une suite précise maintenant la séparation entre: - le chantier interne de publication; - le chantier PCI pour moderniser Louise/Mogador; -- le role du Media Pipeline AdonisJS/JWP; +- le rôle du Media Pipeline AdonisJS/JWP; - les contrats `media_assets` et `publication_jobs`; - les noms recommandes pour clarifier l'architecture. @@ -166,19 +165,19 @@ Prochain jalon recommande: valider les contrats `media_assets`, `publication_job ## Decisions / aide requise - Choisir la plateforme pilote: ONFR, TFO reduit ou autre. -- Decider si Directus est retire, reduit ou garde temporairement en double-run. +- Decider si Directus est retiré, reduit ou garde temporairement en double-run. - Confirmer que les JSON publics via bucket/CDN sont acceptables pour Infra. -- Confirmer les roles de la Publication Console: edimestres, admins, read-only. -- Valider la strategie de cache du `manifest.json`. +- Confirmer les rôles de la Publication Console: édimestres, admins, read-only. +- Valider la stratégie de cache du `manifest.json`. - Valider la retention des runs: recommandation initiale de 10 jours minimum. - Valider si le Sync Engine principal est Laravel, AdonisJS ou autre. - Confirmer qui porte la discussion avec PCI pour l'API v2 et les events futurs. -## Changements de portee +## Changements de portée |Date|Changement|Impact|Decision| |---|---|---|---| -|A definir|Ajout de l'integration JWP via Media Pipeline|Augmente la portee, mais evite une architecture incomplete|Propose| -|A definir|Separation du chantier PCI et du chantier interne|Reduit le risque de blocage fournisseur|Propose| -|A definir|Ajout Publication Console pour corrections d'urgence|Ajoute auth/audit, mais remplace un besoin fort de Directus|Propose| -|A definir|Support des programmations futures J+10|Augmente le volume JSON, mais repond a une demande recurrente|Propose| \ No newline at end of file +|À définir|Ajout de l'integration JWP via Media Pipeline|Augmente la portée, mais evite une architecture incomplète|Proposé| +|À définir|Separation du chantier PCI et du chantier interne|Reduit le risque de blocage fournisseur|Proposé| +|À définir|Ajout Publication Console pour corrections d'urgence|Ajoute auth/audit, mais remplace un besoin fort de Directus|Proposé| +|À définir|Support des programmations futures J+10|Augmente le volume JSON, mais répond à une demande reçurrente|Proposé| \ No newline at end of file diff --git a/20 Work/Ideas/Mogador/Consultation fournisseurs sites- proposition de publication JSON.md b/20 Work/Ideas/Mogador/Consultation fournisseurs sites- proposition de publication JSON.md index 2566e26..bad1368 100644 --- a/20 Work/Ideas/Mogador/Consultation fournisseurs sites- proposition de publication JSON.md +++ b/20 Work/Ideas/Mogador/Consultation fournisseurs sites- proposition de publication JSON.md @@ -1,4 +1,3 @@ -# Consultation fournisseurs sites: proposition de publication JSON ## Objectif @@ -224,6 +223,31 @@ Contient le détail d'un produit ou épisode. } ``` +### Images + +Les images pourraient être fournies avec des URLs déjà prêtes pour les principaux usages des sites. + +Exemple: + +```json +{ + "images": [ + { + "type": "thumbnail", + "alt": "Description de l'image", + "variants": { + "card": "https://images.example.com/tfo/card/abc.jpg", + "hero": "https://images.example.com/tfo/hero/abc.jpg", + "poster": "https://images.example.com/tfo/poster/abc.jpg", + "original": "https://assets.example.com/originals/abc.jpg" + } + } + ] +} +``` + +L'objectif est de ne pas forcer les sites à télécharger des images sources trop lourdes, tout en évitant de dupliquer inutilement les fichiers. Les variants exacts restent à confirmer avec vous. + ### collections/{biznumber}/full.json Contient une vue complète d'une collection, dans le sens attendu par les sites: @@ -381,6 +405,8 @@ Merci de nous dire si cette approche fonctionnerait pour votre site, et de comme - Quels champs media sont requis pour votre lecteur vidéo? - Avez-vous besoin de plusieurs formats d'image? +- Quels variants d'image seraient utiles pour vos pages? Exemples: `card`, `hero`, `poster`, `thumbnail`, `original`. +- Préférez-vous recevoir des URLs d'image prêtes à l'emploi ou construire les URLs à partir d'un template documenté? - Avez-vous besoin de sous-titres, transcriptions, audio ou autres assets dans le JSON? ### Recherche diff --git a/20 Work/Ideas/Mogador/Proposition d'architecture - Content Publication Engine.md b/20 Work/Ideas/Mogador/Proposition d'architecture - Content Publication Engine.md index b1e3a76..abe8f98 100644 --- a/20 Work/Ideas/Mogador/Proposition d'architecture - Content Publication Engine.md +++ b/20 Work/Ideas/Mogador/Proposition d'architecture - Content Publication Engine.md @@ -234,7 +234,7 @@ Ce chantier a une relation directe avec la synchro interne, mais il ne doit pas ```mermaid flowchart TD - Louise["LouiseSysteme source editorial"] + Louise["LouiseSystème source éditorial"] LouiseExport["Louise ExportSQL complet toutes les 3h"] Importer["Import SQL interneBase source locale"] Toolkit["Mogador ToolkitAPI legacy actuelle"] @@ -244,8 +244,12 @@ flowchart TD Diff["Diff Builderfabrique l'incrémentiel interne"] MediaPipeline["Media PipelineAdonisJS/JWP"] - JWP["JWPplateforme video"] - MediaAssets["media_assetsétat media interne"] + JWP["JWPplateforme vidéo"] + MediaAssets["media_assetsétat média interne"] + + AssetPipeline["Asset Pipelineimages + transcriptions"] + S3Assets["S3 Assetsoriginaux optimisés"] + ImageLayer["Image Transformation Layerresize/crop/cache"] Console["Publication Consolemini CMS interne"] Overrides["overridescorrections d'urgence"] @@ -255,7 +259,7 @@ flowchart TD Validator["Validation + rapportsattendu vs publié"] Runs["Published Content Feedruns JSON immuables"] Manifest["manifest.jsonpointe vers le run actif"] - Bucket["Bucket/CDNexposition publique contrôlee"] + Bucket["Bucket/CDNexposition publique contrôlée"] Sites["Sites webTFO / IDELLO / ONFR / linéaire"] Alerts["Slack / Better Stackalertes anomalies"] @@ -274,6 +278,12 @@ flowchart TD MediaPipeline --> MediaAssets MediaPipeline --> Jobs + Snapshot --> AssetPipeline + AssetPipeline --> S3Assets + S3Assets --> ImageLayer + AssetPipeline --> Jobs + ImageLayer --> Engine + Console --> Overrides Console --> Jobs @@ -290,7 +300,49 @@ flowchart TD Bucket --> Sites ``` -Ce schema représente ce qu'on contrôle nous-mêmes. Il ne depend pas d'une API Louise/Mogador v2. +Ce schéma représente ce qu'on contrôle nous-mêmes. Il ne dépend pas d'une API Louise/Mogador v2. + +## Services autour du CPE + +L'architecture cible doit être vue comme un ensemble de services spécialisés autour du Content Publication Engine. + +La règle principale: + +> Chaque service est responsable de son domaine, mais seul le CPE décide ce qui est publié aux sites. + +Services proposés: + +```text +Import Service + Responsable de recevoir/importer le Louise Export SQL dans MySQL. + Produit un statut d'import lisible par le CPE. + +Source Reader + Responsable de lire les données officielles via Mogador Toolkit aujourd'hui, + puis potentiellement via Louise API v2 plus tard. + +Asset Pipeline + Responsable des images, transcriptions, audio et autres fichiers vers S3. + Optimise les originaux quand nécessaire, par exemple via tinyjpg. + +Image Transformation Layer + Responsable du redimensionnement/crop/cache des images à la demande. + Remplace la capacité de resize on the fly qui était utile dans Directus. + +Media Pipeline + Responsable des vidéos JWP et de l'état média dans `media_assets`. + +Publication Console + Responsable des corrections d'urgence, overrides, audit et rollback interne. + +Content Publication Engine + Responsable de valider, assembler, générer et publier les JSON. + +Published Content Feed + Responsable de servir les JSON versionnés via bucket/CDN. +``` + +Le CPE ne doit pas faire l'import SQL, transcoder les vidéos, redimensionner les images ou devenir un CMS complet. Il orchestre la publication à partir des états produits par les autres services. ### Chantier B: évolution PCI @@ -312,7 +364,7 @@ flowchart TD Events -.declenche une relecture officielle.-> InternalReader ``` -Ce deuxieme schema est un projet avec PCI. Il peut ameliorer fortement la vitesse et la fiabilite, mais il doit rester interchangeable. +Ce deuxième schéma est un projet avec PCI. Il peut améliorer fortement la vitesse et la fiabilité, mais il doit rester interchangeable. Le `Content Publication Engine` devrait avoir un `Source Reader` abstrait: @@ -342,7 +394,7 @@ Le reste du système interne ne devrait pas changer: 3. Le Mogador Toolkit expose les données officielles. 4. Le Snapshot Collector lit les données officielles. 5. Le Diff Builder compare le snapshot courant au snapshot précédent. -6. Le Media Pipeline gère JWP et écrit l'état media dans `media_assets`. +6. Le Media Pipeline gère JWP et écrit l'état média dans `media_assets`. 7. La Publication Console gère les corrections d'urgence et écrit les overrides. 8. Les changements créent des `publication_jobs`. 9. Le Content Publication Engine combine données officielles, media, overrides et règles métier. @@ -750,6 +802,117 @@ Contient le détail d'un produit. } ``` +## Images et resize on the fly + +Un avantage important de Directus est sa capacité à redimensionner les images à la demande. Si Directus est retiré ou réduit, cette capacité doit être remplacée explicitement. + +Certaines images sources peuvent être très grandes, parfois en format 4K. Le service tinyjpg peut continuer à optimiser le poids des originaux avant stockage dans S3, mais cela ne remplace pas le besoin des sites d'obtenir plusieurs tailles et ratios selon les pages. + +Recommandation: + +```text +S3 originaux optimisés + -> Image Transformation Layer + -> CDN cache les rendus + -> sites consomment les URLs d'images transformées +``` + +Options recommandées, dans l'ordre: + +1. **Solution AWS/CloudFront de transformation d'images** + + C'est l'option à privilégier si l'infrastructure est déjà orientée AWS/S3/CloudFront. + + Avantages: + + - reste dans l'écosystème AWS; + - S3 peut rester privé; + - CloudFront sert les images; + - les transformations peuvent être contrôlées par presets; + - le cache CDN absorbe la charge; + - moins de service applicatif public à opérer; + - plus facile à faire accepter par l'infrastructure. +2. **imgproxy derrière CloudFront** + + Option technique solide si la solution AWS ne répond pas au besoin. + + Avantages: + + - service spécialisé pour resize/crop/format; + - URLs signées possibles; + - fonctionne bien avec S3/CDN; + - évite de pré-générer trop de variantes. + + Point de vigilance: cela ajoute un service à opérer, patcher, surveiller et sécuriser. + +3. **Cloudflare Images / Transformations** + + Option intéressante techniquement si Cloudflare est déjà accepté dans l'infrastructure web. + + Avantages: + + - resize/optimisation à la demande; + - cache global; + - peu d'opération applicative interne. + + Point de vigilance: si l'organisation veut rester principalement AWS/S3/CloudFront, cette option risque d'être moins acceptable. + + +La recommandation pragmatique est donc: + +```text +Choix 1: AWS/CloudFront Image Transformation +Choix 2: imgproxy derrière CloudFront +Choix 3: Cloudflare Images/Transformations +``` + +Cela évite de mettre du traitement image dans le CPE et évite aussi de pré-générer trop de variantes. + +Le CPE ne devrait pas redimensionner les images lui-même. Il devrait seulement publier les informations nécessaires: + +```json +{ + "images": [ + { + "type": "thumbnail", + "source_url": "https://assets.example.com/originals/abc.jpg", + "alt": "Description de l'image", + "transform": { + "base_url": "https://images.example.com", + "presets": { + "card": "w=400,h=225,fit=cover", + "hero": "w=1600,h=900,fit=cover", + "poster": "w=600,h=900,fit=cover" + } + } + } + ] +} +``` + +Les sites peuvent ensuite utiliser les presets documentés, ou recevoir directement des URLs prêtes à l'emploi si on veut limiter la logique côté site. + +Point important: il faut décider si les sites construisent les URLs de transformation ou si le CPE publie des URLs déjà construites. Pour réduire les risques d'intégration, la v1 devrait probablement publier des URLs prêtes à l'emploi pour les principaux usages: + +```json +{ + "images": [ + { + "type": "thumbnail", + "alt": "Description de l'image", + "variants": { + "card": "https://images.example.com/tfo/card/abc.jpg", + "hero": "https://images.example.com/tfo/hero/abc.jpg", + "poster": "https://images.example.com/tfo/poster/abc.jpg", + "original": "https://assets.example.com/originals/abc.jpg" + } + } + ] +} +``` + +Cela garde la flexibilité du resize on the fly, tout en donnant aux sites un contrat simple. + ### collections/{biznumber}/full.json Contient le modèle attendu par les sites. @@ -859,7 +1022,7 @@ Principe: Si la génération du run `20260730-1200` échoue, `manifest.json` continue de pointer vers `20260730-0900`. Une sync ratée ne casse pas le site. -Cette règle s'applique aussi aux corrections rapides: si une correction d'urgence ou une republication media échoue, le manifest reste sur le dernier run valide. +Cette règle s'applique aussi aux corrections rapides: si une correction d'urgence ou une republication média échoue, le manifest reste sur le dernier run valide. Retention proposée: @@ -1103,7 +1266,7 @@ Tout ce qui dépasse ce périmètre doit être questionné avant d'être ajouté ### Table `media_assets` -Cette table représente l'état media interne d'un produit. +Cette table représente l'état média interne d'un produit. Champs proposés: @@ -1258,7 +1421,7 @@ Produits publiés: 8139 Ecarts: - 1 programme absent du JSON final -- 2 produits sans video JWP +- 2 produits sans vidéo JWP - 5 images manquantes - 1 produit ignoré car type extrait @@ -1278,7 +1441,7 @@ Alertes à mettre en place: - sync trop longue; - écart entre attendu et publié; - programme prévu à 6h absent de la publication avant 6h; -- video JWP manquante; +- vidéo JWP manquante; - image ou transcription manquante; - override actif proche expiration. @@ -1522,7 +1685,7 @@ Avec cette séparation, le Media Pipeline peut évoluer indépendamment. La nouv ```text Louise - Systeme source editorial. + Système source éditorial. Louise Export Export SQL complet génère par Louise. @@ -1537,7 +1700,7 @@ Content Publication Engine Notre moteur interne qui génère les JSON publics. Media Pipeline - Notre service interne qui gère JWP et l'état media. + Notre service interne qui gère JWP et l'état média. Publication Console Mini CMS interne pour édimestres/admins et overrides.