From 97dfa78a19447ef32213c74b45a303b7c4a30cf5 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 25 Nov 2024 11:23:24 +0100 Subject: [PATCH 1/3] =?UTF-8?q?doc:=20Pr=C3=A9cise=20les=20domaines=20et?= =?UTF-8?q?=20scopes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ein-du-monorepo.md => 0002-nx-monorepo.md} | 0 ...escript.md => 0003-conventions-de-code.md} | 29 ++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) rename doc/adr/{0002-utiliser-nx-pour-simplifier-la-gestion-des-projets-au-sein-du-monorepo.md => 0002-nx-monorepo.md} (100%) rename doc/adr/{0003-convention-d-architecture-des-projets-typescript.md => 0003-conventions-de-code.md} (94%) diff --git a/doc/adr/0002-utiliser-nx-pour-simplifier-la-gestion-des-projets-au-sein-du-monorepo.md b/doc/adr/0002-nx-monorepo.md similarity index 100% rename from doc/adr/0002-utiliser-nx-pour-simplifier-la-gestion-des-projets-au-sein-du-monorepo.md rename to doc/adr/0002-nx-monorepo.md diff --git a/doc/adr/0003-convention-d-architecture-des-projets-typescript.md b/doc/adr/0003-conventions-de-code.md similarity index 94% rename from doc/adr/0003-convention-d-architecture-des-projets-typescript.md rename to doc/adr/0003-conventions-de-code.md index 98fd48890f..af7b88f1bc 100644 --- a/doc/adr/0003-convention-d-architecture-des-projets-typescript.md +++ b/doc/adr/0003-conventions-de-code.md @@ -1,16 +1,16 @@ -# 3. Convention d'architecture des projets Typescript +# 3. Conventions de code et d'architecture Date: 2024-10-01 -## Status +## Statut -Proposed +Accepted -## Context +## Contexte Afin d'améliorer la lisibilité, la cohérence et la maintenabilité de notre codebase, il parait nécessaire d'adopter une convention de nommage pour nos projets, fichiers et dossiers au sein du monorepo. Cette convention vise à standardiser les pratiques et à faciliter la navigation et la compréhension du code par tous les membres de l'équipe. -## Decision +## Décision Les conventions de nommage et d'architecture choisies suivent les standards par défaut Typescript, ESLint, Node, Next.js, et Nest.js. @@ -56,9 +56,14 @@ Voici les domaines définis actuellement : 1. `utilisateurs` 2. `collectivites` 3. `referentiels` + - `audits` + - `labelisations` + - `personnalisations` 4. `indicateurs` -5. `plan-actions` -6. `impact-actions` +5. `plans` + - `fiches` + - `paniers` +6. `shared` Les domaines définis doivent rester restreints et (quasi) figés. @@ -67,7 +72,7 @@ L'ajout exceptionnel d'un nouveau domaine ne peut se faire qu'après validation #### Exemples d'entités au sein de ces domaines ``` -plan-actions +plans → plan-action → fiche-action @@ -75,6 +80,10 @@ indicateurs → definition → valeur → categorie + +shared + → thematiques + → pilotes ``` ### Les "layers" et "types" techniques @@ -106,7 +115,7 @@ Exemples plus granulaires, si pertinent : - `views` : couche des composants UI - `hooks` : couche de logique UI -## Consequences +## Conséquences 1. Standards par défaut @@ -124,7 +133,7 @@ Exemples plus granulaires, si pertinent : → [Lien plugin VSCode](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) -## Useful links +## Références - Inspirations autour du concept d'architecture hexagonale / clean code From dc57ac39ac4dc10cc8741200987ccad48cd8342d Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 25 Nov 2024 15:38:48 +0100 Subject: [PATCH 2/3] =?UTF-8?q?Pr=C3=A9cise=20les=20conventions=20de=20dos?= =?UTF-8?q?siers=20et=20fichiers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/adr/0003-conventions-de-code.md | 81 +++++++++++++++++++++++------ 1 file changed, 64 insertions(+), 17 deletions(-) diff --git a/doc/adr/0003-conventions-de-code.md b/doc/adr/0003-conventions-de-code.md index af7b88f1bc..28e8873afd 100644 --- a/doc/adr/0003-conventions-de-code.md +++ b/doc/adr/0003-conventions-de-code.md @@ -27,45 +27,92 @@ Les conventions de nommage et d'architecture choisies suivent les standards par - **`kebab-case` pour les noms de fichiers et dossiers** - Exemple : `src/app/plan-actions/plan-actions.tsx` - -- **Organisation des dossiers d'abord par domaine → puis scope → puis layer technique** - - Exemple : `src/indicateurs/models/indicateur.schema.ts` - - Exemple : `src/plan-actions/shared/models/fiche-action.schema.ts` - - Exemple : `src/app/plan-actions/fiche-actions/views/fiche-action.card.tsx` + Exemple : `src/app/plans/plan-actions.tsx` + +- **Organisation des dossiers d'abord par domaine → puis scope [→ puis feature] [→ puis layer technique]** + + Exemple côté backend : + + ``` + src + └ plans + └ fiches + · └ count-by-statut + · · └ count-by-statut.request.ts + · · └ count-by-statut.response.ts + · · └ count-by-statut.router.ts + · · └ count-by-statut.router.e2e-test.ts + · · └ count-by-statut.service.ts + · └ update + · · └ update.controller.ts + · · └ update.request.ts + · · └ update.service.ts + · └ shared + · └ fiche-action.table.ts + · └ fiche-action-referent.table.ts + └ shared + └ models + └ thematique.table.ts + └ structure-tag.table.ts + ``` + + Exemple côté frontend : + + ``` + src + └ plans + └ toutes-les-fiches + · └ views + · └ fiche-action.list.tsx + · └ fiche-action.list-item.tsx + · └ fiche-action.card.tsx + · └ fiche-action.card.stories.tsx + └ shared + └ hooks + └ use-create-fiche-action.ts + └ use-export-fiche-action.ts + ``` - **Suffix des fichiers avec son "type"** - Exemple type UI : `fiche-action.card.tsx`, `fiche-action.list.tsx`, `fiche-action.list-item.tsx` + Exemple type UI : + + - `fiche-action.card.tsx` + - `fiche-action.list.tsx` + - `fiche-action.list-item.tsx` - **`index.ts` au niveau des sous-scopes**, si besoin, pour rassembler tous les exports associés et simplifier les imports. - Exemple : `src/plan-actions/fiche-actions/index.ts` + Exemple : `src/plans/fiches/index.ts` - → résultat à l'import : `import { FicheAction } from '@tet/api/fiche-actions'` + → résultat à l'import : `import { FicheAction } from '@tet/api/plans/fiches'` ### Les domaines métiers Territoires en Transitions Les domaines correspondent aux principaux contextes métiers de la plateforme Territoires en Transitions. -Voici les domaines définis actuellement : +Voici les domaines et sous-scopes définis actuellement : 1. `utilisateurs` 2. `collectivites` + - `membres` 3. `referentiels` - - `audits` - - `labelisations` - - `personnalisations` + - `scores` + - `personnalisations` + - `snapshots` + - `evaluations` + - `audits` + - `labelisations` 4. `indicateurs` + - `trajectoires` 5. `plans` + - `plans` - `fiches` - `paniers` + - `fiche-modeles` 6. `shared` -Les domaines définis doivent rester restreints et (quasi) figés. +Les domaines et scopes définis doivent rester restreints et (quasi) figés. L'ajout exceptionnel d'un nouveau domaine ne peut se faire qu'après validation auprès de l'ensemble de l'équipe. From 9a663f0f176c47119249e373351b1718e95a0129 Mon Sep 17 00:00:00 2001 From: Fred <98240+farnoux@users.noreply.github.com> Date: Mon, 2 Dec 2024 15:52:39 +0100 Subject: [PATCH 3/3] Update 0003-conventions-de-code.md --- doc/adr/0003-conventions-de-code.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/adr/0003-conventions-de-code.md b/doc/adr/0003-conventions-de-code.md index 28e8873afd..a171a42236 100644 --- a/doc/adr/0003-conventions-de-code.md +++ b/doc/adr/0003-conventions-de-code.md @@ -109,7 +109,7 @@ Voici les domaines et sous-scopes définis actuellement : - `plans` - `fiches` - `paniers` - - `fiche-modeles` + - `modeles` 6. `shared` Les domaines et scopes définis doivent rester restreints et (quasi) figés.