Aller au contenu principal

Votre première application

Cette page présente le plus petit programme AUSUS utile : compiler un domaine, appliquer un schéma, invoquer une action et relire le résultat. C'est la même forme que le script composer boot de ausus/starter.

Si vous voulez le domaine complet et annoté, passez directement au tutoriel HelloInvoice. Cette page se concentre sur la manière dont les couches se connectent.

Les éléments

Une application AUSUS en cours d'exécution est assemblée à partir de cinq éléments :

  1. Un Plugin — la description de votre domaine (voir Plugins).
  2. Le Compilateur — transforme les plugins en un MetadataGraph.
  3. Un PersistenceDriver — dans la v0.1.0, le pilote SQLite.
  4. Le runtimeInvoker, PolicyEngine, WorkflowRuntime, etc.
  5. Un Actor et un Tenant — qui agit, et dans quel tenant.

Étape 1 — compiler le graphe

use Ausus\Compiler;

$compiler = new Compiler();
$graph = $compiler->compile([new HelloInvoiceDsl()]);

echo substr($graph->hash, 0, 12); // content-addressable graph hash

Le MetadataGraph est immuable et déterministe : les mêmes plugins produisent toujours le même hash. Consultez Le graphe de métadonnées.

Étape 2 — appliquer le schéma

Le paquet SQL dérive les instructions CREATE TABLE directement depuis le graphe.

use Ausus\Persistence\Sql\SchemaDeriver;

$pdo = new PDO('sqlite:' . sys_get_temp_dir() . '/myapp.sqlite');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

foreach (SchemaDeriver::deriveAll($graph) as $stmt) {
$pdo->exec($stmt);
}

Cela crée une table par entité, plus la table interne kernel_audit_log.

Étape 3 — câbler le runtime

use Ausus\{Tenant, TenantId, ActorRef, StubActor};
use Ausus\Persistence\Sql\{SqlitePersistenceDriver, DatabaseAuditSink};
use Ausus\Runtime\{
PolicyEngine, WorkflowRuntime, TransitionSetIndex,
EffectDispatcher, DefaultAuditor, SequenceCounter, Invoker,
};

$tenant = new Tenant(new TenantId('acme'));
$actor = new StubActor(
new ActorRef('user', 'user42', 'acme'),
['invoice.creator', 'invoice.issuer', 'invoice.canceler', 'invoice.viewer'],
);

$driver = new SqlitePersistenceDriver($pdo, $graph);
$invoker = new Invoker(
$graph,
$driver,
new PolicyEngine($graph),
new WorkflowRuntime(new TransitionSetIndex($graph)),
new EffectDispatcher(),
new DefaultAuditor(new DatabaseAuditSink($pdo)),
new SequenceCounter(),
$tenant,
$actor,
);

:::note Mono-tenant, mono-acteur par invoker Dans la v0.1.0, un Invoker est construit avec un seul Tenant et un seul Actor. Pour agir en tant que tenant ou acteur différent, construisez un autre Invoker. Il s'agit d'une simplification délibérée de la v0.1.0 — consultez Le runtime. :::

Étape 4 — invoquer une action

use Ausus\Reference;

// Create — no subject, just inputs.
$created = $invoker->invoke('billing.invoice.create', null, [
'number' => 'INV-2026-001',
'customer_name' => 'ACME Corporation',
'amount' => ['amount' => '1500.00', 'currency' => 'USD'],
]);
// $created['id'] is a 26-char ULID; $created['status'] === 'DRAFT'

// Transition — subject required.
$ref = new Reference('acme', 'billing.invoice', $created['id']);
$invoker->invoke('billing.invoice.issue', $ref, []);

Chaque appel invoke() exécute la chaîne complète du runtime — vérification de politique, garde de workflow, effet, audit — au sein d'une seule transaction de base de données. Consultez Le runtime.

Étape 5 — rendre une projection

use Ausus\Runtime\ProjectionRenderer;

$renderer = new ProjectionRenderer($graph, $driver, $tenant);
$schema = $renderer->render('billing.invoice.summary');
// $schema is a ViewSchema array: fields, actions, data.items, ...

Le résultat est un ViewSchema — le format de transport que le moteur de rendu React consomme.

Ce que vous avez construit

Vous disposez maintenant de la tranche verticale complète : graphe → schéma → runtime → projection. L'API HTTP (ausus/api-http) n'est tout simplement que ce même câblage placé derrière le traitement de requêtes PSR-7/15.

Limites actuelles de la v0.1.0

  • Il n'y a pas de conteneur de services ni d'assistant d'auto-câblage dans la v0.1.0 — vous assemblez le runtime explicitement, comme ci-dessus. ausus/starter vous fournit ce câblage déjà écrit.
  • StubActor est un acteur en mémoire fixe. Il n'y a pas de couche d'authentification.

Étapes suivantes