Architecture - vue d'ensemble
Principe
CMS Umbraco 13 headless : aucune page rendue pour l'utilisateur final. Le contenu (articles, auteurs, medias) est expose en JSON via la Content Delivery API v2, completee par des endpoints REST custom. Des frontends externes (cransmontana.ch, icogne.ch, l-info.ch) consomment cette API.
Composition (Program.cs)
csharp
.CreateUmbracoBuilder()
.AddBackOffice() // backoffice de gestion
.AddWebsite() // present mais non utilise pour du rendu
.AddDeliveryApi() // API JSON v2
.AddComposers() // SiteComposer + handlers
.Build();- CORS : policy
UmbracoFrontautorisant uniquementAccmFrontendUrl,IcogneFrontendUrl,LinfoFrontendUrl(depuis la config), AllowAnyMethod/Header. - Logs : Serilog (config Umbraco) avec sink Console (async) defini dans
appsettings.json-> les logs sortent sur stdout et sont consultables viadocker logs; Umbraco ecrit aussi ses logs fichiers dansumbraco/Logs. Pas de monitoring externe (Sentry retire en juillet 2026). - ImageSharp : traitement d'images active.
- Services :
IArticleService/ArticleService,IAuthorService/AuthorServiceenregistres scoped. - Options :
FrontendCmsOptions(URLs frontends pour preview/webhook),PublishWebhookOptions(URL + secret du webhook).
Composer (SiteComposer.cs)
- 2FA :
UmbracoUserAppAuthenticator(Google Authenticator), vue backoffice dansApp_Plugins/TwoFactorProviders. - Handlers de notification :
AdditionalPreviewUrlsNotificationHandler(SendingContentNotification) : injecte les URLs de preview multi-sites dans le backoffice (?id={key}&skin={skin}).MediaSavedHandler(MediaSavedNotification) : synchronise les medias sauvegardes vers le montage disque frontend.ArticleMediaIndexer(ContentSavingNotification) : pre-calcule l'index media (audios/videos/galeries/dessins) et le stocke en JSON dans la proprietemediaIndex.ArticleChangedWebhookHandler(ContentPublished/Unpublished/Deleted) : appelle un webhook frontend pour invalider le cache (headerX-Webhook-Secret).
- Delivery API :
PublishedDateSortenregistre commeISortHandlerETIContentIndexHandler(expose et indexedatePublished:).
Services & interfaces
| Service | Interface | Role |
|---|---|---|
| ArticleService | IArticleService | Requete d'articles publies (filtres skin/recherche/rubrique/categorie/tags/annee), pagination, slug -> key, extraction des tags |
| AuthorService | IAuthorService | Auteurs publies, pagination, fullname calcule |
| ViewRenderService | IViewRenderService | Rend une vue Razor en string |
| BlockGridHtmlRenderer | (interne) | Mappe les blocks (RteBlock, filesBlock, ImageBlock, galleryBlock, videoBlock) vers des partials et rend du HTML pour les consommateurs |
| MediaExtractor | (interne, singleton) | Extrait les references media du HTML/RTE et du BlockGrid -> mediaIndex |
| UmbracoUserAppAuthenticator | ITwoFactorProvider | TOTP Google Authenticator |
Structure des dossiers
Voir la carte du repo dans le CLAUDE.md racine. Points cles :
Controllers/: endpoints REST custom (voirdelivery-api.md).Notifications/: handlers d'evenements Umbraco.DeliveryApi/PublishedDateSort.cs: personnalisation du tri/index Delivery API.Views/Partials/Blocks/: partials de rendu de block grid.
Modele de contenu multi-skins
Quatre racines de site (accmSiteRoot, linfoSiteRoot, icogneSiteRoot, genericSiteRoot), chacune contenant un dossier d'articles ({skin}ArticlesFolder) organise en sous-dossiers par rubrique. Auteurs et tags sont globaux (partages entre skins). Voir ../modules/content-model.md.
Contributors
No contributors
Changelog
No recent changes

