Skip to content

Commit 4b3fb80

Browse files
committed
amélioration architecture
1 parent bf5c824 commit 4b3fb80

File tree

4 files changed

+76
-35
lines changed

4 files changed

+76
-35
lines changed

.cursor/rules/agents/agent-architecte-nx-prompt.md

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,13 @@ Tu dois connaître et appliquer les règles suivantes (déjà configurées dans
3333
libs/
3434
├── shared-ui/ # Composants UI réutilisables (UI pure, aucune dépendance métier)
3535
├── data-access/ # Services HTTP, modèles, interceptors (pas de dépendance UI)
36-
└── feature-*/ # Features métier (peut dépendre de shared-ui et data-access)
37-
├── feature-orders/
38-
├── feature-auth/
39-
└── feature-contacts/
36+
├── feature-orders/ # Feature commandes (peut dépendre de shared-ui et data-access)
37+
├── feature-auth/ # Feature authentification (peut dépendre de shared-ui et data-access)
38+
└── feature-contacts/ # Feature contacts (peut dépendre de shared-ui et data-access)
4039
```
4140

41+
**Note** : Toutes les libs sont au même niveau dans `libs/`. Le préfixe `feature-` est une convention de nommage, pas une hiérarchie de dossiers.
42+
4243
### Règles de Dépendances
4344

4445
-`shared-ui`**AUCUNE** dépendance (UI pure)
@@ -56,14 +57,16 @@ libs/
5657

5758
### Générer une nouvelle lib
5859

60+
**✅ SYNTAXE CORRECTE** : Utiliser `--name` et `--directory` pour créer les libs dans `libs/`
61+
5962
```bash
60-
npx nx g @nx/angular:library libs/<nom-lib> --unitTestRunner=vitest
63+
npx nx g @nx/angular:library --name=<nom-lib> --directory=libs/<nom-lib> --unitTestRunner=vitest
6164
```
6265

6366
**Exemples** :
6467

65-
- `npx nx g @nx/angular:library libs/shared-ui --unitTestRunner=vitest`
66-
- `npx nx g @nx/angular:library libs/feature-auth --unitTestRunner=vitest`
68+
- `npx nx g @nx/angular:library --name=shared-ui --directory=libs/shared-ui --unitTestRunner=vitest`
69+
- `npx nx g @nx/angular:library --name=feature-auth --directory=libs/feature-auth --unitTestRunner=vitest`
6770

6871
### Générer un composant dans une lib
6972

@@ -155,10 +158,10 @@ depConstraints: [
155158

156159
**Exemple : Créer une nouvelle feature**
157160

158-
1. Générer la lib :
161+
1. Générer la lib avec la syntaxe correcte :
159162

160163
```bash
161-
npx nx g @nx/angular:library feature-contacts --unitTestRunner=vitest
164+
npx nx g @nx/angular:library --name=feature-contacts --directory=libs/feature-contacts --unitTestRunner=vitest
162165
```
163166

164167
2. **Ajouter les tags** dans `libs/feature-contacts/project.json` :
@@ -176,6 +179,22 @@ npx nx g @nx/angular:library feature-contacts --unitTestRunner=vitest
176179
npx nx lint feature-contacts
177180
```
178181

182+
### ⚠️ IMPORTANT : Quand modifier les depConstraints
183+
184+
Les `depConstraints` dans `eslint.config.mjs` (racine) sont **déjà configurés** pour les types de libs standard de ce projet :
185+
186+
-`type:app` → peut importer `type:feature`, `type:data-access`, `type:ui`
187+
-`type:feature` → peut importer `type:data-access`, `type:ui`
188+
-`type:ui` → peut importer `type:data-access`
189+
-`type:data-access` → ne peut rien importer
190+
191+
**Vous devez modifier les `depConstraints` uniquement si** :
192+
193+
1. ❗ Vous créez un **nouveau type** de lib (ex: `type:utils`, `type:config`)
194+
2. ❗ Vous changez les **règles de dépendances** entre les types existants
195+
196+
**Sinon** : Il suffit d'ajouter les tags dans `project.json` et les contraintes existantes s'appliqueront automatiquement.
197+
179198
### Matrice de dépendances
180199

181200
| Source → Cible | app | feature | ui | data-access |
@@ -305,7 +324,7 @@ Avant d'utiliser un composant/service d'une lib, vérifier :
305324

306325
2. **Est-ce de la logique métier spécifique à une feature ?**
307326

308-
- OUI → `feature-*/components/` ou `feature-*/services/`
327+
- OUI → Dans la feature concernée (ex: `libs/feature-orders/src/lib/components/` ou `libs/feature-orders/src/lib/services/`)
309328
- NON → Vérifier si c'est de l'accès aux données → `data-access`
310329

311330
3. **Est-ce un appel HTTP ou un modèle de données ?**
@@ -321,12 +340,16 @@ Avant de créer un composant/service, vérifier :
321340

322341
1. [ ] La lib cible existe-t-elle ? Sinon, la générer avec `nx generate`
323342
2. [ ] **Les tags Nx sont-ils ajoutés dans le `project.json` ?** (type:app, type:feature, type:ui, type:data-access)
324-
3. [ ] Le composant/service est-il dans la bonne lib selon sa responsabilité ?
325-
4. [ ] Les dépendances respectent-elles les frontières (pas de dépendance circulaire) ?
326-
5. [ ] Le selector utilise-t-il le bon préfixe (`lib-` pour libs, `app-` pour apps) ?
327-
6. [ ] Les imports utilisent-ils les alias Nx (`@mini-crm/...`) ?
328-
7. [ ] Le composant/service est-il exporté dans le barrel export (`src/index.ts`) ?
329-
8. [ ] Le `project.json` et `tsconfig.base.json` sont-ils correctement configurés ?
343+
3. [ ] **Les `depConstraints` dans `eslint.config.mjs` sont-ils configurés pour le nouveau type de lib ?**
344+
4. [ ] Le composant/service est-il dans la bonne lib selon sa responsabilité ?
345+
5. [ ] Les dépendances respectent-elles les frontières (pas de dépendance circulaire) ?
346+
6. [ ] Le selector utilise-t-il le bon préfixe (`lib-` pour libs, `app-` pour apps) ?
347+
7. [ ] Les imports utilisent-ils les alias Nx (`@mini-crm/...`) ?
348+
8. [ ] Le composant/service est-il exporté dans le barrel export (`src/index.ts`) ?
349+
9. [ ] Le `project.json` et `tsconfig.base.json` sont-ils correctement configurés ?
350+
10. [ ] **Tester avec `npx nx lint <project>` pour vérifier les contraintes**
351+
352+
**Note importante** : Les `depConstraints` dans `eslint.config.mjs` (racine) définissent les règles de dépendances entre les types de libs. Ils sont **déjà configurés** pour les types standard (app, feature, ui, data-access). Si vous créez un **nouveau type** de lib, vous devrez ajouter les contraintes correspondantes.
330353

331354
## 🚀 Exemples de Prompts que Tu Peux Traiter
332355

.cursor/rules/architecture.mdc

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ Ce projet utilise **Nx** pour organiser le code en **monorepo** avec des bibliot
4747

4848
#### `libs/feature-*/` - Features métier
4949

50+
**Note** : `feature-*` est une convention de nommage, pas un dossier parent. Toutes les features sont au même niveau dans `libs/`.
51+
52+
**Exemples** : `libs/feature-orders/`, `libs/feature-auth/`, `libs/feature-contacts/`
53+
5054
- **Rôle** : Features métier isolées et lazy-loadées.
5155
- **Structure interne d'une feature** :
5256
- `components/` : Composants Smart (logique) et Dumb (présentation)
@@ -64,12 +68,12 @@ Pour **garantir le respect des frontières de dépendances**, Nx utilise un syst
6468

6569
Chaque projet (app ou lib) doit avoir des tags dans son `project.json` :
6670

67-
| Type de projet | Tag obligatoire | Exemple |
68-
| -------------- | --------------- | ------- |
69-
| Application | `type:app` | `["type:app", "scope:mini-crm"]` |
70-
| Feature | `type:feature` | `["type:feature", "scope:orders"]` |
71-
| Data Access | `type:data-access` | `["type:data-access"]` |
72-
| Shared UI | `type:ui` | `["type:ui"]` |
71+
| Type de projet | Tag obligatoire | Exemple |
72+
| -------------- | ------------------ | ---------------------------------- |
73+
| Application | `type:app` | `["type:app", "scope:mini-crm"]` |
74+
| Feature | `type:feature` | `["type:feature", "scope:orders"]` |
75+
| Data Access | `type:data-access` | `["type:data-access"]` |
76+
| Shared UI | `type:ui` | `["type:ui"]` |
7377

7478
#### Exemple de configuration
7579

@@ -125,7 +129,7 @@ depConstraints: [
125129
sourceTag: 'type:data-access',
126130
onlyDependOnLibsWithTags: [],
127131
},
128-
]
132+
];
129133
```
130134

131135
#### Règles de dépendances visuelles
@@ -164,10 +168,22 @@ npx nx lint <project-name>
164168
```
165169

166170
**Si une violation est détectée** :
171+
167172
```
168173
error A project tagged with "type:feature" can only depend on libs tagged with "type:data-access", "type:ui"
169174
```
170175

176+
#### ⚠️ Quand modifier les depConstraints
177+
178+
Les `depConstraints` dans `eslint.config.mjs` (racine) sont **déjà configurés** pour ce projet.
179+
180+
**Vous devez les modifier uniquement si** :
181+
182+
1. Vous créez un **nouveau type** de lib (ex: `type:utils`, `type:config`)
183+
2. Vous changez les **règles de dépendances** entre types existants
184+
185+
**Sinon** : Ajoutez simplement les tags dans `project.json` et les contraintes existantes s'appliqueront automatiquement.
186+
171187
### Pourquoi cette organisation Nx ?
172188

173189
1. **Isolation** : Chaque lib peut être développée/testée indépendamment
@@ -219,7 +235,7 @@ export * from './lib/confirm-modal/confirm-modal.component';
219235

220236
```typescript
221237
// Dans feature-orders
222-
import { SpinnerComponent } from '@mini-crm/shared-ui'; // ✅ Via barrel export
238+
import { SpinnerComponent } from '@mini-crm/shared-ui'; // ✅ Via barrel export
223239

224240
// ❌ JAMAIS comme ça (contourne le barrel export)
225241
import { SpinnerComponent } from '@mini-crm/shared-ui/src/lib/spinner/spinner.component';

STARTER-PROMPT.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -282,21 +282,23 @@ Créer à la racine du projet.
282282

283283
### Étape 1 : Créer les libs Nx
284284

285+
**⚠️ IMPORTANT** : Utiliser la syntaxe correcte avec `--name` et `--directory` pour garantir que les libs sont créées dans `libs/`
286+
285287
```bash
286288
# Lib UI partagée
287-
npx nx g @nx/angular:library shared-ui --unitTestRunner=vitest
289+
npx nx g @nx/angular:library --name=shared-ui --directory=libs/shared-ui --unitTestRunner=vitest
288290

289291
# Lib data-access
290-
npx nx g @nx/angular:library data-access --unitTestRunner=vitest
292+
npx nx g @nx/angular:library --name=data-access --directory=libs/data-access --unitTestRunner=vitest
291293

292294
# Lib feature-auth
293-
npx nx g @nx/angular:library feature-auth --unitTestRunner=vitest
295+
npx nx g @nx/angular:library --name=feature-auth --directory=libs/feature-auth --unitTestRunner=vitest
294296

295297
# Lib feature-orders
296-
npx nx g @nx/angular:library feature-orders --unitTestRunner=vitest
298+
npx nx g @nx/angular:library --name=feature-orders --directory=libs/feature-orders --unitTestRunner=vitest
297299

298300
# Lib layout (pour le layout system)
299-
npx nx g @nx/angular:library layout --unitTestRunner=vitest
301+
npx nx g @nx/angular:library --name=layout --directory=libs/layout --unitTestRunner=vitest
300302
```
301303

302304
Nx génère automatiquement :

starter-guide.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -517,12 +517,12 @@ Après chaque approche, réfléchissez à :
517517
**Solution** : Demander explicitement à l'agent de créer les libs d'abord
518518

519519
```
520-
Crée d'abord les libs Nx nécessaires :
521-
- npx nx g @nx/angular:library shared-ui --unitTestRunner=vitest
522-
- npx nx g @nx/angular:library data-access --unitTestRunner=vitest
523-
- npx nx g @nx/angular:library feature-auth --unitTestRunner=vitest
524-
- npx nx g @nx/angular:library feature-orders --unitTestRunner=vitest
525-
- npx nx g @nx/angular:library layout --unitTestRunner=vitest
520+
Crée d'abord les libs Nx nécessaires avec la syntaxe correcte :
521+
- npx nx g @nx/angular:library --name=shared-ui --directory=libs/shared-ui --unitTestRunner=vitest
522+
- npx nx g @nx/angular:library --name=data-access --directory=libs/data-access --unitTestRunner=vitest
523+
- npx nx g @nx/angular:library --name=feature-auth --directory=libs/feature-auth --unitTestRunner=vitest
524+
- npx nx g @nx/angular:library --name=feature-orders --directory=libs/feature-orders --unitTestRunner=vitest
525+
- npx nx g @nx/angular:library --name=layout --directory=libs/layout --unitTestRunner=vitest
526526
```
527527

528528
#### L'agent oublie des fichiers

0 commit comments

Comments
 (0)