Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 17:58:52 +08:00
commit eac17f89fa
40 changed files with 4048 additions and 0 deletions

258
skills/make-all/README.md Normal file
View File

@@ -0,0 +1,258 @@
# Framework Make All
Orchestrateur générant une stack complète pour une entité.
## Vue d'ensemble
Cette skill orchestre l'appel de toutes les skills du framework pour générer une entité complète avec tous ses composants selon les principes Elegant Objects et DDD.
## Caractéristiques
### Stack complète générée
- **Contracts** - Interfaces de base (si absentes)
- **Entity** - Entité Doctrine + Repository
- **Out** - DTO immuable pour output
- **Invalide** - Exceptions métier
- **Urls** - Génération d'URLs + CQRS
- **Collection** - Collection typée
- **Factory** - Factory Foundry pour tests
- **Story** - Story Foundry pour fixtures
## Utilisation
```bash
Use skill framework:make:all
```
Vous serez invité à fournir :
1. Nom de l'entité
2. Propriétés avec types (optionnel)
## Exemple d'utilisation
```bash
EntityName: Product
Properties:
- name: string
- description: string
- price: float
- stock: int
- isActive: bool
```
Génère 15+ fichiers en une seule commande.
## Ordre d'exécution
### Phase 1 - Fondation
```
framework:make:contracts (si besoin)
```
### Phase 2 - Core
```
framework:make:entity
```
### Phase 3 - Patterns
```
framework:make:out
framework:make:invalide
```
### Phase 4 - Avancé
```
framework:make:urls
framework:make:collection
```
### Phase 5 - Tests
```
framework:make:factory
framework:make:story
```
## Fichiers générés
### Contracts (si absents)
```
src/Contracts/
├── OutInterface.php
├── InvalideInterface.php
├── HasUrlsInterface.php
├── OutDataInterface.php
├── InvalideDataInterface.php
├── UrlsDataInterface.php
├── Story/
│ └── StoryInterface.php
└── Doctrine/
└── DoctrineMigrationInterface.php
```
### Core
```
src/
├── Entity/
│ └── Product.php
└── Repository/
├── ProductRepository.php
└── ProductRepositoryInterface.php
```
### Patterns
```
src/
├── Out/
│ └── ProductOut.php
└── Invalide/
└── ProductInvalide.php
```
### Avancé
```
src/
├── Urls/
│ └── ProductUrls.php
├── MessageHandler/
│ ├── ProductUrlsMessage.php
│ └── ProductUrlsMessageHandler.php
└── Collection/
└── ProductCollection.php
```
### Tests
```
src/
├── Factory/
│ └── ProductFactory.php
└── Story/
├── ProductStory.php
└── AppStory.php (updated)
```
## Output exemple
```
✓ Phase 1 - Fondation
✓ Contracts déjà présents
✓ Phase 2 - Core
✓ src/Entity/Product.php
✓ src/Repository/ProductRepository.php
✓ src/Repository/ProductRepositoryInterface.php
✓ Phase 3 - Patterns
✓ src/Out/ProductOut.php
✓ src/Invalide/ProductInvalide.php
✓ Phase 4 - Avancé
✓ src/Urls/ProductUrls.php
✓ src/MessageHandler/ProductUrlsMessage.php
✓ src/MessageHandler/ProductUrlsMessageHandler.php
✓ src/Collection/ProductCollection.php
✓ Phase 5 - Tests
✓ src/Factory/ProductFactory.php
✓ src/Story/ProductStory.php
✓ src/Story/AppStory.php (updated)
📊 Total: 15 fichiers créés
```
## Prochaines étapes
Après génération, suivre ces étapes :
1. **Migration Doctrine**
```bash
php bin/console make:migration
php bin/console doctrine:migrations:migrate
```
2. **Enrichir les classes**
- ProductInvalide : ajouter exceptions métier
- ProductUrls : ajouter méthodes d'URLs
- ProductOut : ajouter propriétés exposées
- ProductCollection : ajouter méthodes métier (YAGNI)
- ProductFactory : ajouter méthodes custom (YAGNI)
- ProductStory : ajouter scénarios de test
3. **Tests**
```bash
php bin/phpunit
```
4. **Validation PHPStan**
```bash
vendor/bin/phpstan analyse
```
## Prérequis
- Framework `atournayre/framework` installé avec ses dépendances
- Projet Symfony avec Doctrine ORM configuré
- Zenstruck Foundry pour les tests (optionnel)
## Avantages
### Rapidité
- Une seule commande pour générer toute la stack
- Pas besoin d'appeler 8 skills manuellement
- Gain de temps considérable
### Cohérence
- Ordre d'exécution garanti
- Dépendances gérées automatiquement
- Pas de risque d'oublier un composant
### Best practices
- Principes Elegant Objects appliqués partout
- DDD respecté
- Architecture cohérente
## Cas d'usage
### Nouveau projet
```bash
# Créer première entité complète
Use skill framework:make:all
EntityName: User
```
### Ajout feature
```bash
# Ajouter nouvelle entité au projet existant
Use skill framework:make:all
EntityName: Order
```
### Prototypage rapide
```bash
# Générer rapidement plusieurs entités
Use skill framework:make:all (Product)
Use skill framework:make:all (Category)
Use skill framework:make:all (Review)
```
## Gestion d'erreurs
Si une skill échoue :
1. Affichage clair de l'erreur
2. Indication de la skill en erreur
3. Arrêt du processus
4. Fichiers déjà créés conservés
## Options futures
Possibles extensions :
- `--skip-tests` : sans Factory/Story
- `--skip-urls` : sans Urls/CQRS
- `--minimal` : Entity + Repository + Out uniquement
- `--api-only` : Stack pour API (Entity + Repository + Out + Collection)
## Principes Elegant Objects appliqués
- Toutes les classes finales
- Constructeurs privés
- Factory statiques
- Immutabilité encouragée
- Interfaces pour tous les contrats
- Tests first-class citizens

195
skills/make-all/SKILL.md Normal file
View File

@@ -0,0 +1,195 @@
---
name: framework:make:all
description: Génère tous les fichiers pour une entité complète (orchestrateur)
license: MIT
version: 1.0.0
---
# Framework Make All Skill
## Description
Orchestrateur qui génère tous les fichiers nécessaires pour une entité complète en appelant séquentiellement toutes les skills du framework.
Cette skill crée une stack complète respectant les principes Elegant Objects et DDD pour une entité donnée.
## Usage
```
Use skill framework:make:all
Vous serez invité à fournir :
- Le nom de l'entité (ex: Product, User, Order)
- Les propriétés avec leurs types (optionnel)
```
## Dépendances
Cette skill orchestre l'appel de toutes les autres skills :
1. `framework:make:contracts` (si pas déjà présents)
2. `framework:make:entity`
3. `framework:make:out`
4. `framework:make:invalide`
5. `framework:make:urls`
6. `framework:make:collection`
7. `framework:make:factory`
8. `framework:make:story`
## Variables requises
- **{EntityName}** - Nom de l'entité en PascalCase (ex: Utilisateur, Product)
- **{properties}** - Liste des propriétés avec types (optionnel, array)
## Outputs
Tous les fichiers générés par les 8 skills :
**Contracts** (si non existants)
- `src/Contracts/OutInterface.php`
- `src/Contracts/InvalideInterface.php`
- `src/Contracts/HasUrlsInterface.php`
- `src/Contracts/OutDataInterface.php`
- `src/Contracts/InvalideDataInterface.php`
- `src/Contracts/UrlsDataInterface.php`
- `src/Contracts/Story/StoryInterface.php`
- `src/Contracts/Doctrine/DoctrineMigrationInterface.php`
**Core**
- `src/Entity/{EntityName}.php`
- `src/Repository/{EntityName}Repository.php`
- `src/Repository/{EntityName}RepositoryInterface.php`
**Patterns**
- `src/Out/{EntityName}Out.php`
- `src/Invalide/{EntityName}Invalide.php`
**Avancé**
- `src/Urls/{EntityName}Urls.php`
- `src/MessageHandler/{EntityName}UrlsMessage.php`
- `src/MessageHandler/{EntityName}UrlsMessageHandler.php`
- `src/Collection/{EntityName}Collection.php`
**Tests**
- `src/Factory/{EntityName}Factory.php`
- `src/Story/{EntityName}Story.php`
- `src/Story/AppStory.php` (updated)
## Workflow
1. Demander le nom de l'entité (EntityName)
2. Demander les propriétés (optionnel)
3. Vérifier si `src/Contracts/` existe
- Si non : exécuter `framework:make:contracts`
4. Exécuter séquentiellement :
1. `framework:make:entity` (avec EntityName et properties)
2. `framework:make:out` (avec EntityName)
3. `framework:make:invalide` (avec EntityName)
4. `framework:make:urls` (avec EntityName)
5. `framework:make:collection` (avec EntityName)
6. `framework:make:factory` (avec EntityName et properties)
7. `framework:make:story` (avec EntityName)
5. Afficher le résumé de tous les fichiers créés
6. Afficher les prochaines étapes recommandées
## Ordre d'exécution (critique)
L'ordre d'appel des skills est important car il respecte les dépendances :
```
Phase 1 - Fondation
└── make:contracts (si besoin)
Phase 2 - Core
└── make:entity (dépend de: contracts)
Phase 3 - Patterns (parallélisables mais dépendent de entity)
├── make:out (dépend de: entity)
└── make:invalide (dépend de: entity)
Phase 4 - Avancé (dépendent de entity + repository)
├── make:urls (dépend de: entity, repository)
└── make:collection (dépend de: entity)
Phase 5 - Tests (dépendent de entity)
├── make:factory (dépend de: entity)
└── make:story (dépend de: entity, factory)
```
## Exemple
```bash
Use skill framework:make:all
# Saisies utilisateur :
EntityName: Product
Properties:
- name: string
- description: string
- price: float
- stock: int
- isActive: bool
# Résultat :
✓ Phase 1 - Fondation
✓ Contracts déjà présents
✓ Phase 2 - Core
✓ src/Entity/Product.php
✓ src/Repository/ProductRepository.php
✓ src/Repository/ProductRepositoryInterface.php
✓ Phase 3 - Patterns
✓ src/Out/ProductOut.php
✓ src/Invalide/ProductInvalide.php
✓ Phase 4 - Avancé
✓ src/Urls/ProductUrls.php
✓ src/MessageHandler/ProductUrlsMessage.php
✓ src/MessageHandler/ProductUrlsMessageHandler.php
✓ src/Collection/ProductCollection.php
✓ Phase 5 - Tests
✓ src/Factory/ProductFactory.php
✓ src/Story/ProductStory.php
✓ src/Story/AppStory.php (updated)
📊 Total: 15 fichiers créés
📝 Prochaines étapes recommandées:
1. Créer la migration Doctrine: php bin/console make:migration
2. Exécuter la migration: php bin/console doctrine:migrations:migrate
3. Enrichir ProductInvalide avec exceptions métier
4. Enrichir ProductUrls avec méthodes d'URLs
5. Enrichir ProductOut avec propriétés exposées
6. Enrichir ProductCollection avec méthodes métier (si besoin)
7. Enrichir ProductFactory avec méthodes custom (si besoin)
8. Enrichir ProductStory avec scénarios de test
9. Lancer les tests: php bin/phpunit
```
## Validation après génération
La skill doit vérifier que tous les fichiers ont été créés correctement :
1. Vérifier existence de tous les fichiers
2. Vérifier que les imports sont corrects
3. Vérifier que les namespaces sont cohérents
4. Vérifier que AppStory a été mis à jour
## Gestion des erreurs
Si une skill échoue :
1. Afficher l'erreur clairement
2. Indiquer quelle skill a échoué
3. Proposer de corriger manuellement
4. Ne pas continuer avec les skills suivantes si une skill critique échoue
## Options avancées (futur)
Potentiellement ajouter des flags :
- `--skip-tests` : ne pas générer Factory et Story
- `--skip-urls` : ne pas générer Urls + handlers
- `--minimal` : générer uniquement Entity + Repository + Out
- `--api-only` : générer pour API (Entity + Repository + Out + Collection)
## Notes
- Cette skill est un orchestrateur, elle ne contient pas de templates
- Elle appelle séquentiellement toutes les autres skills
- L'ordre d'exécution est critique et respecte les dépendances
- Idéale pour démarrer rapidement avec une nouvelle entité
- Génère une stack complète Elegant Objects + DDD