109 lines
3.2 KiB
Markdown
109 lines
3.2 KiB
Markdown
---
|
|
name: framework:make:entity
|
|
description: Génère une entité Doctrine avec repository selon principes Elegant Objects
|
|
license: MIT
|
|
version: 1.0.0
|
|
---
|
|
|
|
# Framework Make Entity Skill
|
|
|
|
## Description
|
|
Génère une entité Doctrine complète avec son repository selon les principes Elegant Objects.
|
|
|
|
L'entité générée inclut :
|
|
- Constructeur privé avec factory statique `create()`
|
|
- Traits Elegant Objects (DatabaseTrait, NullTrait, DependencyInjectionTrait)
|
|
- Implémentation des interfaces de contrats
|
|
- Repository avec interface
|
|
|
|
## Usage
|
|
```
|
|
Use skill framework:make:entity
|
|
|
|
Vous serez invité à fournir :
|
|
- Le nom de l'entité (ex: Product, User, Order)
|
|
- Les propriétés avec leurs types (ex: name:string, email:string, isActive:bool)
|
|
```
|
|
|
|
## Templates
|
|
- `Entity/Utilisateur.php` - Template d'entité
|
|
- `Repository/UtilisateurRepository.php` - Template de repository
|
|
- `Repository/UtilisateurRepositoryInterface.php` - Template d'interface repository
|
|
|
|
## Variables requises
|
|
- **{EntityName}** - Nom de l'entité en PascalCase (ex: Utilisateur, Product)
|
|
- **{entityName}** - Nom de l'entité en camelCase (ex: utilisateur, product)
|
|
- **{namespace}** - Namespace du projet (défaut: App)
|
|
- **{properties}** - Liste des propriétés avec types (array)
|
|
|
|
## Dépendances
|
|
- Requiert que les Contracts soient présents
|
|
- Appelle automatiquement `framework:make:contracts` si les interfaces n'existent pas
|
|
|
|
## Outputs
|
|
- `src/Entity/{EntityName}.php`
|
|
- `src/Repository/{EntityName}Repository.php`
|
|
- `src/Repository/{EntityName}RepositoryInterface.php`
|
|
|
|
## Workflow
|
|
|
|
1. Demander le nom de l'entité (EntityName)
|
|
2. Demander les propriétés (nom, type, nullable)
|
|
3. Vérifier si `src/Contracts/` existe
|
|
- Si non : appeler `framework:make:contracts`
|
|
4. Générer l'entité depuis le template :
|
|
- Remplacer `{EntityName}` par le nom fourni
|
|
- Remplacer `{entityName}` par la version camelCase
|
|
- Générer les propriétés dans le constructeur
|
|
- Générer les méthodes getter pour chaque propriété
|
|
5. Générer le repository et son interface
|
|
6. Afficher le résumé des fichiers créés
|
|
|
|
## Patterns appliqués
|
|
|
|
### Entité
|
|
- Classe `final`
|
|
- Constructeur privé
|
|
- Factory statique `create()` pour instanciation
|
|
- Traits : DatabaseTrait, NullTrait, DependencyInjectionTrait
|
|
- Attributs Doctrine ORM (#[ORM\Entity], #[ORM\Id], #[ORM\Column])
|
|
- Implémentation des interfaces :
|
|
- LoggableInterface
|
|
- DatabaseEntityInterface
|
|
- NullableInterface
|
|
- DependencyInjectionAwareInterface
|
|
- OutInterface
|
|
- HasUrlsInterface
|
|
- InvalideInterface
|
|
|
|
### Repository
|
|
- Classe `final`
|
|
- Extends ServiceEntityRepository
|
|
- Implémente l'interface du repository
|
|
- Constructeur avec ManagerRegistry uniquement
|
|
|
|
## Exemple
|
|
|
|
```bash
|
|
Use skill framework:make:entity
|
|
|
|
# Saisies utilisateur :
|
|
EntityName: Product
|
|
Properties:
|
|
- id: Uuid
|
|
- name: string
|
|
- price: float
|
|
- isActive: bool
|
|
|
|
# Résultat :
|
|
✓ src/Entity/Product.php
|
|
✓ src/Repository/ProductRepository.php
|
|
✓ src/Repository/ProductRepositoryInterface.php
|
|
```
|
|
|
|
## Notes
|
|
- L'ID de type Uuid est ajouté automatiquement
|
|
- Les propriétés sont toujours privées avec getters
|
|
- Pas de setters (immutabilité)
|
|
- La méthode `toLog()` inclut automatiquement toutes les propriétés
|