Initial commit
This commit is contained in:
107
skills/make-entity/README.md
Normal file
107
skills/make-entity/README.md
Normal file
@@ -0,0 +1,107 @@
|
||||
# Framework Make Entity
|
||||
|
||||
Génère une entité Doctrine avec repository selon principes Elegant Objects.
|
||||
|
||||
## Vue d'ensemble
|
||||
Cette skill crée une entité Doctrine complète respectant les principes Elegant Objects, avec son repository et son interface.
|
||||
|
||||
## Caractéristiques
|
||||
|
||||
### Entité générée
|
||||
- Constructeur privé + factory statique `create()`
|
||||
- Classe `final`
|
||||
- Propriétés privées avec getters uniquement
|
||||
- Pas de setters (immutabilité encouragée)
|
||||
- Implémentation des interfaces de contrats
|
||||
- Traits Atournayre intégrés
|
||||
- Attributs Doctrine ORM configurés
|
||||
- Méthode `toLog()` pour LoggableInterface
|
||||
|
||||
### Repository généré
|
||||
- Extends ServiceEntityRepository
|
||||
- Classe `final`
|
||||
- Interface dédiée
|
||||
- Prêt pour méthodes custom
|
||||
|
||||
## Utilisation
|
||||
|
||||
```bash
|
||||
Use skill framework:make:entity
|
||||
```
|
||||
|
||||
Vous serez invité à fournir :
|
||||
1. Nom de l'entité (PascalCase)
|
||||
2. Liste des propriétés avec types
|
||||
|
||||
## Exemple d'utilisation
|
||||
|
||||
```bash
|
||||
EntityName: Product
|
||||
Properties:
|
||||
- name: string
|
||||
- description: string
|
||||
- price: float
|
||||
- stock: int
|
||||
- isActive: bool
|
||||
```
|
||||
|
||||
Génère :
|
||||
```php
|
||||
// src/Entity/Product.php
|
||||
final class Product implements LoggableInterface, DatabaseEntityInterface, ...
|
||||
{
|
||||
use DatabaseTrait;
|
||||
use NullTrait;
|
||||
use DependencyInjectionTrait;
|
||||
|
||||
private function __construct(
|
||||
#[ORM\Id]
|
||||
#[ORM\Column(type: 'uuid')]
|
||||
private Uuid $id,
|
||||
#[ORM\Column(type: 'string')]
|
||||
private string $name,
|
||||
// ...
|
||||
) {}
|
||||
|
||||
public static function create(Uuid $id, string $name, ...): self
|
||||
{
|
||||
return new self(id: $id, name: $name, ...);
|
||||
}
|
||||
|
||||
public function id(): Uuid { return $this->id; }
|
||||
public function name(): string { return $this->name; }
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
## Structure créée
|
||||
|
||||
```
|
||||
src/
|
||||
├── Entity/
|
||||
│ └── {EntityName}.php
|
||||
└── Repository/
|
||||
├── {EntityName}Repository.php
|
||||
└── {EntityName}RepositoryInterface.php
|
||||
```
|
||||
|
||||
## Prérequis
|
||||
- Contracts doivent exister (appelle automatiquement `framework:make:contracts` si absents)
|
||||
- Projet Symfony avec Doctrine ORM configuré
|
||||
- Framework `atournayre/framework` installé
|
||||
|
||||
## Types de propriétés supportés
|
||||
- Scalaires : `string`, `int`, `float`, `bool`
|
||||
- UUID : `Uuid` (Symfony\Component\Uid\Uuid)
|
||||
- DateTime : `\DateTimeImmutable`
|
||||
- Arrays : `array`
|
||||
- Relations Doctrine (à configurer manuellement après génération)
|
||||
|
||||
## Principes Elegant Objects appliqués
|
||||
- Constructeur privé
|
||||
- Factory statique pour création
|
||||
- Classe finale (pas d'héritage)
|
||||
- Pas de setters publics
|
||||
- Propriétés privées avec getters
|
||||
- Interfaces pour tous les contrats
|
||||
- Immutabilité encouragée
|
||||
Reference in New Issue
Block a user