mistery23 / laravel-aggregate-events
laravel aggregate events
Installs: 110
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:package
Requires
- php: ^7.2
- illuminate/contracts: ~5.8.0|^6.0
This package is auto-updated.
Last update: 2020-11-06 18:56:34 UTC
README
Install
composer require mistery23/laravel-aggregate-events
Features
Add domain events to your entity. Record your event and release.
Using
use Mistery23\AggregateEvents\EventTrait; class User extends Model implements AggregateEventRoot { use EventTrait; public static function signUp( Id $id, Name $name, ... ): self { $user = new self(); $user->id = $id; $user->name = $name; ... $user->recordEvent(new UserSignupedEvent($user)); return $user; } }
And release events:
use Mistery23\AggregateEvents\EventDispatcher; class UserRepository { private $dispatcher; /** * UserRepository constructor. * * @param EventDispatcher $dispatcher */ public function __construct(EventDispatcher $dispatcher) { $this->dispatcher = $dispatcher; } /** * Add user * * @param Model $user * * @return void * * @throws \RuntimeException */ public function add(Model $user): void { if (false === $user->save()) { throw new \RuntimeException('Save error.'); } $this->dispatcher->dispatchAll($user->releaseEvents()); } }
License
This package is free software distributed under the terms of the MIT license. Enjoy!