Aller au contenu principal

Référence du DSL

Un aide-mémoire condensé pour le DSL d'AUSUS. Pour la version expliquée, voir Le DSL PHP.

Squelette de plugin

use Ausus\{DslPlugin, Dsl, Field, Action};

final class MyPlugin extends DslPlugin
{
public function name(): string { return 'myplugin'; }
public function phpNamespace(): string { return 'Acme\\MyPlugin'; }

public function dsl(Dsl $dsl): void { /* declare entities */ }
}

Dsl

AppelRenvoie
$dsl->entity('local')EntityBuilder pour {plugin}.local

EntityBuilder

AppelObjectif
->fields(['name' => FieldBuilder, ...])déclarer les champs du domaine
->actions(['name' => ActionBuilder, ...])déclarer les actions
->workflow('fieldName')marquer un champ enum comme état de workflow
->projection('name', fields: [...], actions: [...], role: '...')déclarer une projection

Field

AppelType
Field::string()string
Field::integer()integer
Field::datetime()datetime
Field::money()money
Field::enum('A', 'B', ...)enum

Modificateurs de FieldBuilder

AppelEffet
->nullable()autorise null
->default($v)valeur par défaut
->unique()unique au sein du tenant (enregistré, non appliqué en v0.1.0)
->max($n)longueur maximale de chaîne (enregistrée, non appliquée en v0.1.0)
->currency('USD')devise du champ money
->options([...])options de l'enum

Action

AppelGenresubjectRequired
Action::create('f1', 'f2', ...)createfalse
Action::transition('field', from: 'A', to: 'B')transitiontrue

Modificateurs de ActionBuilder

AppelEffet
->requireRole('role')attache une politique RoleRequired
->stamp('field')(transition) écrit l'horodatage courant dans field
->andTransition('field', from: 'B', to: 'C')(transition) ajoute une paire source→cible

Types de champs

string · integer · enum · money · datetime — déclarables. identity · version · system_string — types système, injectés par le kernel.

Champs système (auto-injectés)

id (identity) · tenant_id (system_string) · _version (version) · created_at (datetime) · updated_at (datetime).

Nommage des FQN

ÉlémentModèleExemple
Entité{plugin}.{entity}billing.invoice
Action{entity}.{action}billing.invoice.issue
Projection{entity}.{projection}billing.invoice.summary
Workflow{entity}.lifecyclebilling.invoice.lifecycle
Table SQL{entity} avec ._billing_invoice