Skip to content

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 UmbracoFront autorisant uniquement AccmFrontendUrl, 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 via docker logs ; Umbraco ecrit aussi ses logs fichiers dans umbraco/Logs. Pas de monitoring externe (Sentry retire en juillet 2026).
  • ImageSharp : traitement d'images active.
  • Services : IArticleService/ArticleService, IAuthorService/AuthorService enregistres scoped.
  • Options : FrontendCmsOptions (URLs frontends pour preview/webhook), PublishWebhookOptions (URL + secret du webhook).

Composer (SiteComposer.cs)

  • 2FA : UmbracoUserAppAuthenticator (Google Authenticator), vue backoffice dans App_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 propriete mediaIndex.
    • ArticleChangedWebhookHandler (ContentPublished/Unpublished/Deleted) : appelle un webhook frontend pour invalider le cache (header X-Webhook-Secret).
  • Delivery API : PublishedDateSort enregistre comme ISortHandler ET IContentIndexHandler (expose et indexe datePublished:).

Services & interfaces

ServiceInterfaceRole
ArticleServiceIArticleServiceRequete d'articles publies (filtres skin/recherche/rubrique/categorie/tags/annee), pagination, slug -> key, extraction des tags
AuthorServiceIAuthorServiceAuteurs publies, pagination, fullname calcule
ViewRenderServiceIViewRenderServiceRend 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
UmbracoUserAppAuthenticatorITwoFactorProviderTOTP Google Authenticator

Structure des dossiers

Voir la carte du repo dans le CLAUDE.md racine. Points cles :

  • Controllers/ : endpoints REST custom (voir delivery-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