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

View File

@@ -0,0 +1,55 @@
# Framework Make Contracts
Génère les interfaces de contrats pour une architecture Elegant Objects.
## Vue d'ensemble
Cette skill crée l'ensemble des interfaces nécessaires pour supporter les principes Elegant Objects et DDD dans un projet Symfony.
## Interfaces générées
### Interfaces principales
- **OutInterface** - Pour objets de sortie (DTO immuables)
- **InvalideInterface** - Pour exceptions métier
- **HasUrlsInterface** - Pour objets ayant des URLs générées
### Interfaces de data
- **OutDataInterface** - Pour data classes de sortie
- **InvalideDataInterface** - Pour data classes d'invalidation
- **UrlsDataInterface** - Pour data classes d'URLs
### Interfaces spécialisées
- **StoryInterface** - Pour stories de tests (Foundry)
- **DoctrineMigrationInterface** - Pour migrations Doctrine
## Utilisation
```bash
# Via skill
Use skill framework:make:contracts
```
## Structure créée
```
src/
└── Contracts/
├── OutInterface.php
├── InvalideInterface.php
├── HasUrlsInterface.php
├── OutDataInterface.php
├── InvalideDataInterface.php
├── UrlsDataInterface.php
├── Story/
│ └── StoryInterface.php
└── Doctrine/
└── DoctrineMigrationInterface.php
```
## Prérequis
Aucun - C'est la première skill à exécuter dans un nouveau projet.
## Principes Elegant Objects appliqués
- Toutes les interfaces définissent des contrats clairs
- Pas de méthodes statiques
- Chaque interface a une responsabilité unique
- Favorise l'immutabilité et l'encapsulation

View File

@@ -0,0 +1,59 @@
---
name: framework:make:contracts
description: Génère les interfaces de contrats pour une architecture Elegant Objects
license: MIT
version: 1.0.0
---
# Framework Make Contracts Skill
## Description
Génère l'ensemble des interfaces de contrats nécessaires pour une architecture respectant les principes Elegant Objects et DDD.
Ces interfaces servent de fondation pour toutes les autres skills du framework.
## Usage
```
Use skill framework:make:contracts
```
## Templates
- `OutInterface.php` - Interface pour objets de sortie (DTO)
- `InvalideInterface.php` - Interface pour exceptions métier
- `HasUrlsInterface.php` - Interface pour objets ayant des URLs
- `OutDataInterface.php` - Interface pour data classes de sortie
- `InvalideDataInterface.php` - Interface pour data classes d'invalidation
- `UrlsDataInterface.php` - Interface pour data classes d'URLs
- `Story/StoryInterface.php` - Interface pour stories de tests
- `Doctrine/DoctrineMigrationInterface.php` - Interface pour migrations Doctrine
## Variables requises
Aucune - Ces interfaces sont génériques et ne nécessitent pas de paramètres.
## Dépendances
Aucune - C'est la première skill à exécuter (Niveau 0 - Fondation).
## Outputs
- `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`
## Workflow
1. Vérifier si le répertoire `src/Contracts/` existe
2. Créer la structure de répertoires si nécessaire :
- `src/Contracts/`
- `src/Contracts/Story/`
- `src/Contracts/Doctrine/`
3. Copier tous les templates d'interfaces depuis `framework/skills/make-contracts/templates/Contracts/` vers `src/Contracts/`
4. Afficher la liste des fichiers créés
## Notes
- Ces interfaces n'ont pas besoin d'être modifiées pour chaque projet
- Elles doivent être créées une seule fois par projet
- Toutes les autres skills du framework dépendent de ces interfaces

View File

@@ -0,0 +1,18 @@
<?php
declare(strict_types=1);
namespace App\Contracts\Doctrine;
use Doctrine\DBAL\Schema\Schema;
interface DoctrineMigrationInterface
{
public function up(Schema $schema): void;
public function down(Schema $schema): void;
public function description(): string;
public function isTransactional(): bool;
}

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace App\Contracts;
interface HasUrlsInterface
{
public function urls(): mixed;
}

View File

@@ -0,0 +1,12 @@
<?php
declare(strict_types=1);
namespace App\Contracts;
/**
* Marker interface for Invalide data objects.
*/
interface InvalideDataInterface
{
}

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace App\Contracts;
interface InvalideInterface
{
public function invalide(): mixed;
}

View File

@@ -0,0 +1,12 @@
<?php
declare(strict_types=1);
namespace App\Contracts;
/**
* Marker interface for Out data objects.
*/
interface OutDataInterface
{
}

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace App\Contracts;
interface OutInterface
{
public function out(): mixed;
}

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace App\Contracts\Story;
interface StoryInterface
{
public function build(): void;
}

View File

@@ -0,0 +1,12 @@
<?php
declare(strict_types=1);
namespace App\Contracts;
/**
* Marker interface for Urls data objects.
*/
interface UrlsDataInterface
{
}