mistery23/laravel-aggregate-events

This package is abandoned and no longer maintained. No replacement package was suggested.

laravel aggregate events

v1.0.1 2020-01-06 16:58 UTC

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!