Repository navigation
[NestJS] Modularisation de server #1889
Copy link
Copy link
Labels
technical debtRésoud de la dette techniqueRésoud de la dette technique
Milestone
Description
Modularisation de server vers server-nestjs
Référence auditée :
origin/mainàa3568efb(2026-09-14).Ce registre mesure uniquement les 75 routes V1 encore enregistrées dans
apps/server. « Routé » signifie routé par
apps/nginx-strangler/conf.d/routing.confversionné, pas observé en
production.
États
- Legacy seul : aucune implémentation NestJS V1 équivalente.
- Porté, non enregistré : contrôleur NestJS présent, module absent du
chemin de chargement. - Enregistré, non routé : contrôleur chargé, fallback Nginx vers le legacy.
- Routé vers NestJS : contrôleur chargé et règle Nginx V1 vers NestJS,
sans blocage structurel connu. - Routé, conditionnel à confirmer : règle Nginx présente, module soumis à
une variableUSE_*non versionnée. - Bloqué par parité d'événements : route routée, mais un événement requis
n'a pas de consommateur NestJS équivalent.
Registre V1
| Module | Méthode | Route V1 | État | Preuve |
|---|---|---|---|---|
| admin-role | GET |
/api/v1/admin/roles |
Porté, non enregistré | Contrôleur présent ; AdminRoleModule absent de MainModule.imports. |
| admin-role | POST |
/api/v1/admin/roles |
Porté, non enregistré | Contrôleur présent ; AdminRoleModule absent de MainModule.imports. |
| admin-role | PATCH |
/api/v1/admin/roles |
Porté, non enregistré | Contrôleur présent ; AdminRoleModule absent de MainModule.imports. |
| admin-role | GET |
/api/v1/admin/roles/member-counts |
Porté, non enregistré | Contrôleur présent ; AdminRoleModule absent de MainModule.imports. |
| admin-role | DELETE |
/api/v1/admin/roles/:roleId |
Porté, non enregistré | Contrôleur présent ; AdminRoleModule absent de MainModule.imports. |
| admin-token | GET |
/api/v1/admin/tokens |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| admin-token | POST |
/api/v1/admin/tokens |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| admin-token | DELETE |
/api/v1/admin/tokens/:tokenId |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| cluster | GET |
/api/v1/clusters |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| cluster | POST |
/api/v1/clusters |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| cluster | GET |
/api/v1/clusters/:clusterId |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| cluster | GET |
/api/v1/clusters/usage/:clusterId |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| cluster | GET |
/api/v1/clusters/:clusterId/environments |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| cluster | PUT |
/api/v1/clusters/:clusterId |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| cluster | DELETE |
/api/v1/clusters/:clusterId |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| environment V1 | POST |
/api/v1/environments |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| environment V1 | GET |
/api/v1/environments |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| environment V1 | PUT |
/api/v1/environments/:environmentId |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| environment V1 | DELETE |
/api/v1/environments/:environmentId |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| log | GET |
/api/v1/logs |
Enregistré, non routé | Contrôleur chargé ; fallback location /api/ vers legacy. |
| project | POST |
/api/v1/projects |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| project | GET |
/api/v1/projects/:projectId |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| project | GET |
/api/v1/projects |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| project | PUT |
/api/v1/projects/:projectId |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| project | DELETE |
/api/v1/projects/:projectId |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| project | GET |
/api/v1/projects/data |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| project-bulk | POST |
/api/v1/projects-bulk |
Routé vers NestJS | Contrôleur chargé ; location /api/v1/projects-bulk. |
| project-hooks | PUT |
/api/v1/projects/:projectId/hooks |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| project-secrets | GET |
/api/v1/projects/:projectId/secrets |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| project-member | GET |
/api/v1/projects/:projectId/members |
Bloqué par parité d'événements | Contrôleur chargé et routé ; aucun @OnEvent('projectMember.*'). |
| project-member | POST |
/api/v1/projects/:projectId/members |
Bloqué par parité d'événements | Contrôleur chargé et routé ; aucun @OnEvent('projectMember.*'). |
| project-member | PATCH |
/api/v1/projects/:projectId/members |
Bloqué par parité d'événements | Contrôleur chargé et routé ; aucun @OnEvent('projectMember.*'). |
| project-member | DELETE |
/api/v1/projects/:projectId/members/:userId |
Bloqué par parité d'événements | Contrôleur chargé et routé ; aucun @OnEvent('projectMember.*'). |
| project-role | GET |
/api/v1/projects/:projectId/roles |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| project-role | POST |
/api/v1/projects/:projectId/roles |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| project-role | PATCH |
/api/v1/projects/:projectId/roles |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| project-role | GET |
/api/v1/projects/:projectId/roles/member-counts |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| project-role | DELETE |
/api/v1/projects/:projectId/roles/:roleId |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| project-service | GET |
/api/v1/projects/:projectId/services |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| project-service | POST |
/api/v1/projects/:projectId/services |
Routé vers NestJS | Contrôleur chargé ; location ^~ /api/v1/projects. |
| repository V1 | POST |
/api/v1/repositories |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| repository V1 | GET |
/api/v1/repositories |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| repository V1 | POST |
/api/v1/repositories/:repositoryId/sync |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| repository V1 | PUT |
/api/v1/repositories/:repositoryId |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| repository V1 | DELETE |
/api/v1/repositories/:repositoryId |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| service-chain | GET |
/api/v1/service-chains |
Routé, conditionnel à confirmer | Routé par Nginx ; PluginModule exige USE_SERVICE_CHAIN=true. |
| service-chain | GET |
/api/v1/service-chains/:serviceChainId |
Routé, conditionnel à confirmer | Routé par Nginx ; PluginModule exige USE_SERVICE_CHAIN=true. |
| service-chain | POST |
/api/v1/service-chains/:serviceChainId/retry |
Routé, conditionnel à confirmer | Routé par Nginx ; PluginModule exige USE_SERVICE_CHAIN=true. |
| service-chain | POST |
/api/v1/service-chains/validate/:validationId |
Routé, conditionnel à confirmer | Routé par Nginx ; PluginModule exige USE_SERVICE_CHAIN=true. |
| service-chain | GET |
/api/v1/service-chains/:serviceChainId/flows |
Routé, conditionnel à confirmer | Routé par Nginx ; PluginModule exige USE_SERVICE_CHAIN=true. |
| service-monitor | GET |
/api/v1/health-services |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| service-monitor | GET |
/api/v1/complete-services |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| service-monitor | GET |
/api/v1/refresh-services |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| stage | GET |
/api/v1/stages |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| stage | POST |
/api/v1/stages |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| stage | GET |
/api/v1/stages/:stageId/environments |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| stage | PUT |
/api/v1/stages/:stageId |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| stage | DELETE |
/api/v1/stages/:stageId |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| version | GET |
/api/v1/version |
Enregistré, non routé | Contrôleur chargé ; fallback location /api/ vers legacy. |
| healthz | GET |
/api/v1/healthz |
Enregistré, non routé | Contrôleur chargé ; fallback location /api/ vers legacy. |
| system-config | GET |
/api/v1/system/plugins |
Enregistré, non routé | Contrôleur chargé ; fallback location /api/ vers legacy. |
| system-config | POST |
/api/v1/system/plugins |
Enregistré, non routé | Contrôleur chargé ; fallback location /api/ vers legacy. |
| system-settings | GET |
/api/v1/system/settings |
Enregistré, non routé | Contrôleur chargé ; fallback location /api/ vers legacy. |
| system-settings | POST |
/api/v1/system/settings |
Enregistré, non routé | Contrôleur chargé ; fallback location /api/ vers legacy. |
| user | GET |
/api/v1/users/matching |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| user | GET |
/api/v1/auth |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| user | GET |
/api/v1/users |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| user | PATCH |
/api/v1/users |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| user-token | GET |
/api/v1/user/tokens |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| user-token | POST |
/api/v1/user/tokens |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| user-token | DELETE |
/api/v1/user/tokens/:tokenId |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| zone | GET |
/api/v1/zones |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| zone | POST |
/api/v1/zones |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| zone | PUT |
/api/v1/zones/:zoneId |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
| zone | DELETE |
/api/v1/zones/:zoneId |
Legacy seul | Contrat et router V1 legacy ; aucun contrôleur NestJS V1. |
Annexes hors décompte V1
- Remplacements V2 (9 routes) : les quatre routes environment et les cinq
routes repository sous/api/v2/projects/:projectId/...sont chargées par
NestJS et routées parlocation /api/v2/. Elles ne retirent pas les routes
V1/api/v1/environmentset/api/v1/repositories. - NestJS-only (4 routes) : les routes deployment sous
/api/v1/projects/:projectId/deploymentssont chargées par NestJS et
couvertes par leur règle Nginx dédiée.
Événements et plugins
- Les plugins Vault, Keycloak, GitLab, Harbor, Nexus, ArgoCD et SonarQube ont
des consommateursproject.upsertetproject.delete; leur chargement est
conditionnel àUSE_*, sauf Keycloak. projectMember.upsertetprojectMember.deleten'ont aucun consommateur.adminRole.upsertetadminRole.deleten'ont aucun consommateur et ne
passent pas parcapturePluginResult.
Définition du fini
- Les 75 routes V1 ont chacune une preuve de contrôleur,
d'enregistrement, de routage et, si applicable, de parité d'événements. - Aucune route n'est marquée routée lorsque son module ou un consommateur
d'événement requis est absent. - Les routes V2 et NestJS-only restent hors décompte V1.
- Toute future bascule est accompagnée du test ciblé et de
nginx -t.
Références
apps/server/src/resources/index.tsapps/nginx-strangler/conf.d/routing.confapps/server-nestjs/documentation/Modularisation-de-console-server/MODULARISATION-STATUT.mddocs/superpowers/specs/2026-09-16-nestjs-modularisation-status-design.md
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
technical debtRésoud de la dette techniqueRésoud de la dette technique
Activity
[-][NestJS] Moodularisation de server[/-][+][NestJS] Modularisation de server[/+]65 remaining items
refactor(shared): upstream personal access token body schema
test(user-tokens): name the one-day expiration offset
fix(admin-token): optional withRevoked, service-level expiration chec…
refactor(user): retirer l'alias AllUsersQuery au profit du schéma
refactor(user): retirer l'alias AllUsersQuery au profit du schéma
feat(server-nestjs): register AdminRoleModule
docs(server-nestjs): reconcile modularisation status
docs(server-nestjs): drop dead method link, prune unused graph, date …
feat(nginx-strangler): route healthz and version to server-nestjs
fix(server-nestjs): guard system settings upsert behind ManageSystem
fix(admin-token): optional withRevoked, service-level expiration chec…
refactor(user): retirer l'alias AllUsersQuery au profit du schéma
refactor(user): retirer l'alias AllUsersQuery au profit du schéma