feat(docs): améliorer lisibilité du diagramme Architecture Services

Améliorations:
- Orientation LR (Left-Right) au lieu de TB pour meilleur flux
- Ajout icônes émojis pour identification visuelle rapide
- Simplification des connexions (api --> services au lieu de connexions multiples)
- Labels plus courts dans les boîtes
- Styles améliorés avec bordures colorées
- Meilleure organisation des sous-graphes

Le diagramme est maintenant beaucoup plus lisible et professionnel.
This commit is contained in:
jpgiannetti
2026-02-07 17:43:13 +01:00
parent 1a67e5ffd0
commit 2c0522158c

View File

@@ -113,72 +113,77 @@ TTL cache : 5 minutes (le contenu ne bouge pas).
## Architecture Services ## Architecture Services
```mermaid ```mermaid
flowchart TB flowchart LR
subgraph clients["Clients"] subgraph clients["📱 Clients"]
direction TB
mobile["Mobile Apps<br/>iOS/Android<br/>Flutter"] mobile["Mobile Apps<br/>iOS/Android<br/>Flutter"]
carplay["CarPlay /<br/>Android Auto"] carplay["CarPlay /<br/>Android Auto"]
end end
subgraph ovh["OVH VPS Essential (Gravelines, France)"] subgraph ovh["🇫🇷 OVH VPS Essential (Gravelines, France)"]
nginx["NGINX Cache<br/>+ Let's Encrypt<br/>TLS 1.3, Rate Limiting"] direction TB
api["API Gateway<br/>Go + Fiber :8080"]
subgraph services["Backend Services (Monolithe Modulaire)"] nginx["🌐 NGINX<br/>Cache + TLS 1.3<br/>Rate Limiting"]
auth["Auth Service<br/>JWT validation"] api["🚪 API Gateway<br/>Go + Fiber<br/>:8080"]
user["User Service<br/>Profils, Jauges"]
content["Content/Geo Service<br/>Recommandations<br/>PostGIS queries"] subgraph services["Backend (Monolithe Modulaire)"]
streaming["Streaming Service<br/>HLS generation"] direction LR
payment["Payment Service<br/>Mangopay integration"] auth["🔐 Auth"]
notif["Notification Service<br/>FCM/APNS"] user["👤 User"]
content["🎙️ Content/Geo"]
streaming["📡 Streaming"]
payment["💳 Payment"]
notif["🔔 Notif"]
end end
zitadel["Zitadel IdP<br/>OAuth2 PKCE<br/>:8081"] zitadel["🔑 Zitadel<br/>OAuth2 PKCE<br/>:8081"]
ip2loc["IP2Location DB<br/>SQLite ~50MB<br/>Mode dégradé"] ip2loc["🌍 IP2Location<br/>SQLite 50MB"]
subgraph data["Données"] subgraph data["💾 Données"]
pgbouncer["PgBouncer<br/>Connection pooling<br/>:6432"] direction TB
postgres["PostgreSQL 16<br/>+ PostGIS 3.4<br/>Schémas:<br/>- roadwave<br/>- zitadel"] pgbouncer["PgBouncer<br/>:6432"]
redis["Redis 7 Cluster<br/>Cache + Geospatial<br/>GEORADIUS"] postgres["PostgreSQL 16<br/>+ PostGIS 3.4"]
redis["Redis 7<br/>Cache + Geo"]
end end
end end
subgraph external["Services Externes"] subgraph external["☁️ Services Externes"]
storage["OVH Object Storage<br/>Fichiers audio HLS"] direction TB
mangopay["Mangopay<br/>Paiements, KYC"] storage["OVH Object Storage<br/>(Fichiers HLS)"]
brevo["Brevo<br/>Emails transactionnels"] mangopay["Mangopay<br/>(Paiements/KYC)"]
fcm["FCM / APNS<br/>Push notifications"] brevo["Brevo<br/>(Emails)"]
fcm["FCM/APNS<br/>(Push)"]
end end
mobile --> nginx %% Flux clients
carplay --> nginx clients --> nginx
nginx --> api nginx --> api
api --> auth
api --> user %% API vers services
api --> content api --> services
api --> streaming
api --> payment
api --> notif
api --> ip2loc api --> ip2loc
%% Services vers infra
auth --> zitadel auth --> zitadel
user --> pgbouncer user --> data
user --> redis content --> data
content --> pgbouncer
content --> redis
streaming --> storage streaming --> storage
payment --> mangopay payment --> mangopay
notif --> fcm notif --> fcm
%% Infra interne
zitadel --> pgbouncer zitadel --> pgbouncer
pgbouncer --> postgres pgbouncer --> postgres
brevo -.email.-> mobile %% Retours vers clients
fcm -.push.-> mobile brevo -.email.-> clients
fcm -.push.-> clients
style ovh fill:#e3f2fd style ovh fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
style external fill:#fff3e0 style external fill:#fff3e0,stroke:#f57c00,stroke-width:2px
style clients fill:#f3e5f5 style clients fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
style data fill:#e8f5e9 style data fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
style services fill:#fff,stroke:#666,stroke-width:1px
``` ```
**Souveraineté** : 100% données en France (RGPD compliant) **Souveraineté** : 100% données en France (RGPD compliant)