lecoffre-front/docs/analyse.md
Omar Oughriss 6a51281d00
All checks were successful
build-and-push-int-dev / build_push (push) Successful in 10s
Replace 'ext' tag with 'int-dev'
2025-09-22 15:01:49 +02:00

82 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### Objet
Analyse synthétique de `lecoffre-front` (Next.js) : périmètre, dépendances, configuration, intégrations et points dattention.
### Périmètre et stack
- **Framework**: Next.js 14 (React 18), rendu côté serveur désactivable selon pages
- **Langage**: TypeScript
- **Styles**: SCSS + MUI (@mui/material), Emotion
- **Bundle**: `output: 'standalone'`, `basePath: '/lecoffre'`
### Arborescence notable
- **`src/front/`**: API client (services, entités, SDK) et composants UI (DesignSystem, Layouts, Elements)
- **`pages/`**: routes Next (tableau client, gestion utilisateurs, dossiers, documents, souscriptions)
- **`src/common/Api/LeCoffreApi`**: modules Admin/Customer/Notary/SuperAdmin et `sdk`
- **`src/front/Stores/`**: stores locaux (User, Customer, Window, Toasts)
- **`src/front/Services/`**: services utilitaires (JWT, PDF, Watermark, Crypto, Cookie)
### Configuration et variables
- **`next.config.js`**: publie `NEXT_PUBLIC_*` aux clients et serveur; `reactStrictMode: false`; `ignoreBuildErrors: true`
- **BasePath**: `/lecoffre` (impacte le routage et les assets)
- **Intégrations**: Hotjar, GTM, Docaposte, 4NK (iframe/URL), Idnot (OAuth)
### Dépendances clés
- **UI**: `@mui/material`, `@emotion/*`, `react-select`, `react-toastify`
- **Utilitaires**: `jwt-decode`, `file-saver`, `jszip`, `pdf-lib`, `sass`, `sharp`
- **Ressources**: `le-coffre-resources` (dépôt Git 4NK)
### Intégrations externes (indiciaires)
- **Back**: via `NEXT_PUBLIC_BACK_API_*` et `NEXT_PUBLIC_API_URL`
- **Idnot**: endpoints OAuth (authorize, base_url, redirect_uri)
- **Docaposte**: `NEXT_PUBLIC_DOCAPOSTE_API_URL`
### Points dattention
- **TypeScript**: `ignoreBuildErrors: true` masque des erreurs de typage
- **BasePath**: vérifier la cohérence côté Nginx et lors du déploiement
- **Ressources Git**: accès SSH requis pour `le-coffre-resources`
- **Sécurité**: exposition de multiples `NEXT_PUBLIC_*` (vérifier quaucun secret nest divulgué)
### Tests et qualité
- **Scripts**: `build` sans lint, `lint` séparé, `format` ciblé `src/`
- **`tests/`**: présent (à enrichir avec scénarios e2e/smoke sur pages principales)
### Déploiement
- **Dockerfile**: présent (build Next standalone)
- **Intégration**: orchestré via `lecoffre_node` (voir analyse dédiée)
## Scripts npm, build et configuration
### Scripts
- **dev**: `next dev`
- **build**: `NEXT_TELEMETRY_DISABLED=1 next build --no-lint`
- **start**: `next start`
- **lint**: `next lint`
- **format**: `prettier --write src`
### next.config.js
- `output: 'standalone'`, `basePath: '/lecoffre'`
- `typescript.ignoreBuildErrors: true` (risque: masquage derreurs)
- Exposition de nombreuses variables `NEXT_PUBLIC_*` via `env`, `publicRuntimeConfig` et `serverRuntimeConfig`
### Docker (multistage)
- Étapes: `deps` (install), `development` (dev), `builder` (build), `int-dev` (runtime)
- BuildKit SSH pour `le-coffre-resources` (clé non copiée dans limage)
- Port runtime 3000; utilisateur nonroot `lecoffreuser`
### Dépendances (extraits)
- UI: `@mui/material`, `@emotion/*`, `react-select`, `react-toastify`
- Utilitaires: `jwt-decode`, `file-saver`, `jszip`, `pdf-lib`, `sass`, `sharp`
- Ressources: `le-coffre-resources` (SSH Git 4NK)
- Versions Node/Next: Node 19alpine; Next `^14.2.3`
## Risques et recommandations
- Désactiver `ignoreBuildErrors` et corriger les erreurs TypeScript avant build
- Envisager Node LTS (20/22) pour les images
- Vérifier quaucune info sensible nest exposée via `NEXT_PUBLIC_*`
- Assurer la cohérence `basePath` `/lecoffre` avec Nginx et les liens internes
- Introduire du code splitting ciblé (`React.lazy`/`Suspense`) sur pages lourdes
- Centraliser létat (Redux/Context) pour limiter le prop drilling dans `src/front`
## Changements IdNot
- Lauthentification IdNot appelle désormais le backend en POST avec le code dautorisation dans le corps JSON sur `/api/v1/idnot/auth`.
- Ce changement évite des erreurs en reverse proxy liées à des segments dURL très longs.