PHP Classes

File: docs/advanced-usage.md

Recommend this page to a friend!
  Packages of Alberto Arena   Laravel Event Sourcing Generator   docs/advanced-usage.md   Download  
File: docs/advanced-usage.md
Role: Auxiliary data
Content type: text/markdown
Description: Auxiliary data
Class: Laravel Event Sourcing Generator
Generate classes for event sourcing
Author: By
Last change:
Date: 7 days ago
Size: 5,878 bytes
 

Contents

Class file image Download

Advanced options

Back to README

Table of Contents

Specify primary key

?? Go to TOC

Primary key can be uuid or id.

Use option --primary-key=[uuid|id] to choose it, or answer the interactive question.

Important: when using a migration, the primary key will be automatically inferred.

If primary key id is preferred, aggregates will not be available.

Example

Generate a domain using id as primary key:

php artisan make:event-sourcing-domain Animal --primary-key=id

Generate aggregates

?? Go to TOC

*Read more about aggregates in Spatie documentation.*

Aggregates can be generated only if primary key is uuid.

Use option --aggregate=[0|1], or answer interactive question.

Example

Generate aggregates:

php artisan make:event-sourcing-domain Animal --aggregate=1 --primary-key=uuid

If aggregates have been generated, actions will automatically use them.

Generate reactors

?? Go to TOC

*Read more about reactors in Spatie documentation.*

Use option --reactor=[0|1].

Example

Generate reactors:

php artisan make:event-sourcing-domain Animal --reactor=1

Reactors will be generated for all events, including failed ones when enabled with option --failed-events=1.

Generate failed events

?? Go to TOC

The command can generate create / update / delete failed events.

Use option --failed-events=[0|1].

Example

Generate failed events:

php artisan make:event-sourcing-domain Animal --failed-events=1

The following events will be created

AnimalCreationFailed
AnimalDeletionFailed
AnimalUpdateFailed

If notifications are created as well using option --notification=VALUE, a failed notification for each failed event will be automatically created.

Generate notifications

?? Go to TOC

The command supports 4 types of notifications:

  • database
  • mail
  • Slack
  • Teams

Use option --notifications=[database,mail,slack,teams]. Notifications must be separated by comma.

When notifications are created, one or more concerns (traits) will be created as well in Notifications/Concerns folder, for shared properties and formatting.

Examples

Generate automatically database notifications:

php artisan make:event-sourcing-domain Animal --notifications=database

Generate automatically Teams notifications:

php artisan make:event-sourcing-domain Animal --notifications=teams

Generate automatically mail and Slack notifications:

php artisan make:event-sourcing-domain Animal --notifications=mail,slack

Specify the indentation

?? Go to TOC

Default indentation of generated files is 4 space.

Use option --indentation=NUMBER.

Example

php artisan make:event-sourcing-domain Animal --indentation=2

This setup will use 2 space as indentation.

Specify the path of root folder

?? Go to TOC

It is possible to specify the App folder, e.g. if a domain must be created in unit tests folder or in a package (root is src).

Default root folder is app.

Use option --root=VALUE.

Example: Generate domain in src folder for a package

Generate domain in src folder:

php artisan make:event-sourcing-domain Animal --root=src

Directory structure

src/
??? Domain/
?   ??? Animal/
?       ??? Actions/
?       ?   ??? CreateAnimal
?       ?   ??? DeleteAnimal
?       ?   ??? UpdateAnimal
?       ??? Aggregates/
?       ?   ??? AnimalAggregate
?       ??? DataTransferObjects/
?       ?   ??? AnimalData
?       ??? Events/
?       ?   ??? AnimalCreated
?       ?   ??? AnimalDeleted
?       ?   ??? AnimalUpdated
?       ??? Projections/
?       ?   ??? Animal
?       ??? Projectors/
?       ?   ??? AnimalProjector
?       ??? Reactors/
?           ??? AnimalReactor
??? etc.

Example: Generate domain in tests/Unit folder

Generate domain in tests/Unit folder:

php artisan make:event-sourcing-domain Animal --root=tests/Unit

Directory structure

tests/
??? Unit/
    ??? Domain/
    ?   ??? Animal/
    ?       ??? Actions/
    ?       ?   ??? CreateAnimal
    ?       ?   ??? DeleteAnimal
    ?       ?   ??? UpdateAnimal
    ?       ??? Aggregates/
    ?       ?   ??? AnimalAggregate
    ?       ??? DataTransferObjects/
    ?       ?   ??? AnimalData
    ?       ??? Events/
    ?       ?   ??? AnimalCreated
    ?       ?   ??? AnimalDeleted
    ?       ?   ??? AnimalUpdated
    ?       ??? Projections/
    ?       ?   ??? Animal
    ?       ??? Projectors/
    ?       ?   ??? AnimalProjector
    ?       ??? Reactors/
    ?           ??? AnimalReactor
    ??? etc.