Cinq vues Mermaid dans docs/architecture (vue d'ensemble, infra, backend, frontend, donnees), plus leur index, les conventions de statut et la regle de maintenance en PR. Reprend les jalons J1-J4, disparus de dev lors de la reecriture du README (2670483) et restes seulement sur main : plus rien sur la branche de travail ne disait ce que le projet doit prouver. Fige les decisions du module Terraform k3s, qui ne vivaient jusqu'ici que dans des commentaires de code et des description de variables : version epinglee obligatoire, Traefik desactive, kubeconfig en 600/root, state local. Corrige trois affirmations devenues fausses : le frontend classe "a initialiser" alors que le squelette existe depuis49f4697, le port 4200 dit attendu par docker-compose.yml qui n'a aucun service frontend, et l'arborescence core/ prescrite par TESTING.md sans exister.
4.5 KiB
Frontend
Application Angular 22, 100 % standalone, testée avec Vitest. Source dans apps/frontend.
État actuel
Statut : En cours. Le projet est un ng new intact. Le tableau de la
vue d'ensemble le classe désormais correctement, le README.md racine le
disait encore « à initialiser » alors que le squelette existe depuis 49f4697.
Ce qui est en place :
- Bootstrap par
bootstrapApplication(App, appConfig), aucunNgModuledans le dépôt. app.config.tsfournitprovideBrowserGlobalErrorListeners()etprovideRouter(routes).- Vitest via le builder
@angular/build:unit-test, couverture activée, un fichier de test. - Prettier configuré, parser
angularpour les gabarits HTML.
Ce qui n'existe pas encore :
routesest un tableau vide. Aucune page, aucune navigation.provideHttpClientn'est pas fourni et@angular/common/httpn'est importé nulle part : l'application n'appelle aucune API.app.htmlest la page d'accueil Angular par défaut, commentaires de remplacement compris.- Aucune bibliothèque de graphiques, aucun kit d'interface, aucune gestion d'état.
- Aucun lint : ESLint n'est pas installé.
Arborescence cible
Statut : Cible. Elle n'est pas inventée ici : TESTING.md la
prescrit déjà dans ses gabarits de tests.
flowchart TB
subgraph src["src/app"]
core["core/<br/>services, guards, interceptors"]
features["features/<br/>un dossier par domaine"]
shared["shared/<br/>composants réutilisables"]
end
features -.-> core
features -.-> shared
core -.-> env["environments/<br/>apiUrl"]
Un service HTTP par domaine dans core/services, les composants de page dans features, et rien
d'autre que du réutilisable dans shared. Les composants n'appellent jamais HttpClient
directement : ils passent par un service, ce qui rend le double de test trivial.
Flux HTTP
Statut : Cible. Le chemin est câblé, rien ne l'emprunte encore.
sequenceDiagram
participant C as Composant
participant S as Service Angular
participant P as ng serve, proxy
participant A as FastAPI
C->>S: appel de méthode
S->>P: GET /api/v1/...
P->>A: http://localhost:8000/api/v1/...
A-->>S: JSON
S-->>C: modèle typé
En développement, proxy.conf.json redirige tout /api vers http://localhost:8000. C'est ce
qui évite le CORS sur le poste, et c'est pourquoi environment.development.ts se contente d'un
apiUrl relatif, /api/v1.
En production, il n'y a pas de proxy : environment.ts porte une URL absolue. Angular substitue
le fichier via fileReplacements, et la configuration production est celle par défaut.
Dette connue. src/environments/environment.ts, qui est la configuration de production,
pointe http://localhost:8000/api/v1 en dur. La valeur est celle du poste de développement :
telle quelle, un build de production ne joindra jamais l'API. À corriger avant le premier
déploiement, en même temps que sera tranchée la question de l'ingress dans
10-infra.md.
Exécution
| Commande | Effet |
|---|---|
npm ci |
Installe les dépendances. node_modules/ n'est pas présent par défaut |
npm start |
ng serve sur le port 4200, proxy actif |
npm run build |
Build de production |
npm run test |
Vitest en mode observateur |
npm run test:ci |
Vitest en une passe |
Le frontend n'a pas de cible dans le Makefile racine et aucun service dans
docker-compose.yml : il se pilote uniquement par npm, depuis apps/frontend. Le port 4200
n'apparaît dans le compose que comme valeur par défaut d'APP_CORS_ORIGINS, côté backend.
Un Dockerfile frontend existe sur la branche feat/pipeline-cd, mais il est mono-étage et sans
CMD : il construit sans rien servir. Le README.md de l'application demande un multi-étage
avec un service statique, il reste à écrire.
Sécurité
- Le frontend ne détient aucun secret :
environment.tsne porte qu'une URL. - L'authentification n'existe pas côté API, donc pas de garde ni d'intercepteur de jeton à ce
stade.
core/guardsetcore/interceptorssont prévus pour cela.
Tests
Conventions et gabarits : apps/frontend/TESTING.md.
Questions ouvertes
- Quelle bibliothèque de graphiques pour les séries temporelles, et si Grafana en couvre déjà une partie du besoin.
- Gestion d'état : signaux seuls, ou une bibliothèque dédiée.
- Comment
apiUrlest injecté en production : build par environnement, ou configuration lue au démarrage.