doc: correct Yavsc.Blogs role (backend, not front)

When documenting the per-project layout in the previous commit,
I described Yavsc.Blogs as 'Sous-domaine front web specifique
au blog', which is wrong: Yavsc.Blogs contains only ApiController
classes, services and models — no Razor views. The plan is to
deploy it as a headless backend API on a dedicated subdomain in
production, while the blog front (Razor views) stays in
Yavsc.Org to share rendering and auth.

Correct the description, the ASCII diagram, the table row, and
the 'why' paragraph accordingly.
This commit is contained in:
Paul Schneider 2026-06-27 14:59:43 +01:00
commit 4ba1aa8858

View file

@ -2,9 +2,9 @@
> **Récapitulatif** : Le code est réparti en sept projets .NET > **Récapitulatif** : Le code est réparti en sept projets .NET
> sous `src/`, organisés par rôle : domaine partagé, bibliothèque > sous `src/`, organisés par rôle : domaine partagé, bibliothèque
> métier, front web utilisateur-facing, API REST, blog, front admin, > métier, front web utilisateur-facing, API REST principale,
> et tests. Détail dans cette page, racine de l'architecture : > backend API dédié aux blogs, front admin, et tests. Détail dans
> [Architecture.md](../Architecture.md). > cette page, racine de l'architecture : [Architecture.md](../Architecture.md).
## Vue d'ensemble ## Vue d'ensemble
@ -14,24 +14,21 @@
│ Modèles du domaine partagés │ │ Modèles du domaine partagés │
└──────────────┬───────────────┘ └──────────────┬───────────────┘
┌──────────────▼───────────────┐ ┌──────────────▼────────────────────┐
│ Yavsc.Server (lib) │ │ Yavsc.Server (lib) │
│ Helpers, EF, services │ │ Helpers, EF, services │
└──────┬───────────────┬───────┘ └──────┬─────────┬──────────────┬───┘
│ │ │ │ │
┌─────────────▼──┐ ┌───────▼────────────┐ ┌─────────────▼──┐ ┌───▼──────────┐ ┌▼────────────────────┐
│ Yavsc.Org (web)│ │ Yavsc.Api (web) │ │ Yavsc.Org (web)│ │ Yavsc.Api │ │ Yavsc.Blogs (web) │
│ Front web │ │ API REST JSON │ │ Front web │ │ (web) │ │ Backend API blogs │
│ + Identity- │ │ JwtBearer │ │ + Identity- │ │ API REST │ │ (aucune vue Razor) │
│ Server │ │ │ │ Server │ │ principale │ │ déployé sur sous- │
│ + Razor views │ └────────────────────┘ │ + Razor views │ │ JwtBearer │ │ domaine en prod │
│ (héberge aussi │ └──────────────┘ └─────────────────────┘
│ le front des │
│ blogs) │
└────────────────┘ └────────────────┘
┌──────▼────────────────────────────┐
│ Yavsc.Blogs (web) │
│ Front web spécifique au blog │
│ (consomme Yavsc.Server) │
└───────────────────────────────────┘
Clients externes : Clients externes :
- Yavsc.Web : front admin / expérimentation, JwtBearer. - Yavsc.Web : front admin / expérimentation, JwtBearer.
@ -44,9 +41,9 @@ Clients externes :
|--------------------|----------------|-----------------------------------------------------------------------------------------------| |--------------------|----------------|-----------------------------------------------------------------------------------------------|
| `Yavsc.Abstract` | Library | Modèles du domaine partagés (entités, value objects, enums). Pas de dépendance framework. | | `Yavsc.Abstract` | Library | Modèles du domaine partagés (entités, value objects, enums). Pas de dépendance framework. |
| `Yavsc.Server` | Library | Bibliothèque métier : `DbContext`, helpers PayPal/SMTP, services métier, modèles billing/blog. | | `Yavsc.Server` | Library | Bibliothèque métier : `DbContext`, helpers PayPal/SMTP, services métier, modèles billing/blog. |
| `Yavsc.Org` | ASP.NET Web | Front web utilisateur-facing : Razor views, IdentityServer8 (OP), AccountController, Razor. | | `Yavsc.Org` | ASP.NET Web | Front web utilisateur-facing : Razor views, IdentityServer8 (OP), AccountController. **Héberge aussi les vues (front) des blogs**. |
| `Yavsc.Api` | ASP.NET Web | API REST JSON consommée par les clients externes (PostIt, …). JwtBearer auth. | | `Yavsc.Api` | ASP.NET Web | API REST JSON principale consommée par les clients externes (PostIt, …). JwtBearer auth. |
| `Yavsc.Blogs` | ASP.NET Web | Sous-domaine front web spécifique au blog, autonome mais consomme `Yavsc.Server`. | | `Yavsc.Blogs` | ASP.NET Web | **Backend API headless** dédié aux blogs (uniquement `*ApiController` + services + modèles — aucune vue Razor). Destiné à être déployé sur un sous-domaine en production, séparé du front web hébergé par `Yavsc.Org`. |
| `Yavsc.Web` | ASP.NET Web | Front admin / expérimentations, JwtBearer, référence `Yavsc.Abstract` et `Yavsc.Server`. | | `Yavsc.Web` | ASP.NET Web | Front admin / expérimentations, JwtBearer, référence `Yavsc.Abstract` et `Yavsc.Server`. |
| `Yavsc.Org.Tests` | Test (xUnit) | Tests d'isolation du front web (`Yavsc.Org`) — fakes, controller tests. | | `Yavsc.Org.Tests` | Test (xUnit) | Tests d'isolation du front web (`Yavsc.Org`) — fakes, controller tests. |
@ -56,24 +53,33 @@ Clients externes :
externes (PostIt — projet Avalonia sous `src/PostIt/`) de partager externes (PostIt — projet Avalonia sous `src/PostIt/`) de partager
les modèles DTO sans embarquer Entity Framework ni ASP.NET Core. les modèles DTO sans embarquer Entity Framework ni ASP.NET Core.
- **`Yavsc.Server` est une library, pas un web host** : on peut - **`Yavsc.Server` est une library, pas un web host** : on peut
tester les services sans démarrer Kestrel ; plusieurs fronts tester les services sans démarrer Kestrel ; plusieurs fronts et
(Org, Api, Blogs) consomment les mêmes helpers sans dupliquer. backends consomment les mêmes helpers sans dupliquer.
- **`Yavsc.Api` séparé de `Yavsc.Org`** : l'API REST est destinée - **`Yavsc.Api` séparé de `Yavsc.Org`** : l'API REST principale
aux clients headless (PostIt, intégrations tierces) ; elle n'a est destinée aux clients headless (PostIt, intégrations tierces) ;
pas besoin des vues Razor ni d'IdentityServer. Inversement, le elle n'a pas besoin des vues Razor ni d'IdentityServer.
front web peut servir ses propres pages serveur sans exposer Inversement, le front web peut servir ses propres pages serveur
une API REST. sans exposer une API REST.
- **`Yavsc.Blogs` séparé** : le blog a son propre cycle de vie - **`Yavsc.Blogs` séparé en backend headless** : le front des blogs
(déploiement, modèle de contenu) tout en réutilisant le contexte (vues Razor) reste dans `Yavsc.Org` pour partager le rendu et
EF de `Yavsc.Server`. l'auth avec le reste de l'application. Le backend, lui, est
isolé dans son propre projet `Yavsc.Blogs` (uniquement des
`*ApiController` + services + modèles, sans aucune vue Razor),
destiné à être déployé sur un sous-domaine dédié en production
— ex: `blogs.yavsc.example` — pour pouvoir scaler / restreindre
l'API blog indépendamment du reste de la plateforme.
## Conséquences pratiques ## Conséquences pratiques
- Une modification d'un modèle DDD dans `Yavsc.Abstract` peut - Une modification d'un modèle DDD dans `Yavsc.Abstract` peut
casser **plusieurs fronts à la fois** (Org, Api, Blogs, Web). casser **plusieurs fronts et backends à la fois** (Org, Api,
C'est attendu ; les tests de `Yavsc.Org.Tests` doivent suivre. Blogs, Web). C'est attendu ; les tests de `Yavsc.Org.Tests`
doivent suivre.
- Ajouter une route API dans `Yavsc.Api` n'implique pas de - Ajouter une route API dans `Yavsc.Api` n'implique pas de
recompiler `Yavsc.Org` (et inversement). recompiler `Yavsc.Org` (et inversement).
- `Yavsc.Blogs` et `Yavsc.Org` partagent le contexte EF via
`Yavsc.Server` mais n'ont pas de dépendance l'un envers l'autre :
la même base de données, deux hôtes distincts en production.
- `PostIt` (sous `src/PostIt/`) ne référence que `Yavsc.Abstract` ; - `PostIt` (sous `src/PostIt/`) ne référence que `Yavsc.Abstract` ;
il n'embarque ni EF ni ASP.NET Core. il n'embarque ni EF ni ASP.NET Core.