1. Go to this page and download the library: Download digitalrisks/lese library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
digitalrisks / lese example snippets
/*
* This class is responsible for storing events. To add extra behaviour you
* can change this to a class of your own. The only restriction is that
* it should implement \Spatie\EventSourcing\StoredEventRepository.
*/
'stored_event_repository' => \DigitalRisks\Lese\EventStoreStoredEventRepository::class,
/*
* This class is responsible for storing snapshots. To add extra behaviour you
* can change this to a class of your own. The only restriction is that
* it should implement \Spatie\EventSourcing\StoredEventRepository.
*/
'snapshot_repository' => \DigitalRisks\Lese\EventStoreSnapshotRepository::class,
return [
/**
* The EventStore connection to use when subscribing to events from external
* services. Works with TCP or TLS connections.
*/
'tcp_url' => env('EVENTSTORE_TCP_URL', 'tcp://admin:changeit@localhost:1113'),
/**
* The EventStore connection to use when publishing and reconstituting
* aggregates. Supports HTTP or HTTPS.
*/
'http_url' => env('EVENTSTORE_HTTP_URL', 'http://admin:changeit@localhost:2113'),
/**
* Listen to these streams when running `event-sourcing:subscribe`. Uses
* a comma delimetered list from the environment as default.
*/
'subscription_streams' => array_filter(explode(',', env('EVENTSTORE_SUBSCRIPTION_STREAMS'))),
/**
* Used as the group when connecting to an EventStore persisten subscription.
*/
'group' => env('EVENTSTORE_SUBSCRIPTION_GROUP', env('APP_NAME', 'laravel')),
/**
* By default Aggregate classes are mapped to a category name based on their
* class name. Example App\Aggregates\AccountAggregate would be published
* to an account-uuid stream. This allows you to implicitly map classes
* to categories so that it could be published to account_v2-uuid.
*/
'aggregate_category_map' => [],
/**
* If not using aggregates, events need to mapped to streams to be
* published. An example would be the AccoutCreated event
* could be published on to the accounts stream.
*/
'event_stream_map' => [],
/**
* If the event is not mapped to a stream,
* publish to this stream by default.
*/
'default_stream' => env('EVENTSTORE_DEFAULT_STREAM', 'events'),
/**
* The stream to listen to when replaying all events. Instead of using
* $all, it is recommended to setup a project which emits events
* from various streams into a stream specific for your app.
*/
'all' => env('EVENTSTORE_ALL', '$all'),
/**
* Number of events to read in a single API
* call when reconstituting events.
*/
'read_size' => env('EVENTSTORE_READ_SIZE', 4096),
/**
* Number of events to read in a single TCP
* message when replaying all events.
*/
'batch_size' => env('EVENTSTORE_BATCH_SIZE', 4096),
/**
* This class contains a few callbacks to govern the bridge between EventStore and the
* Laravel Event Sourcing package. You can customise the class to
namespace App\Events;
use Spatie\EventSourcing\ShouldBeStored;
class MoneyAdded implements ShouldBeStored
{
/** @var string */
public $accountUuid;
/** @var int */
public $amount;
public function __construct(string $accountUuid, int $amount)
{
$this->accountUuid = $accountUuid;
$this->amount = $amount;
}
}
event(new MoneyAdded('21410-81231', 100))
namespace App\Projectors;
use App\Account;
use App\Events\AccountCreated;
use App\Events\AccountDeleted;
use App\Events\MoneyAdded;
use App\Events\MoneySubtracted;
use Spatie\EventSourcing\Projectors\Projector;
use Spatie\EventSourcing\Projectors\ProjectsEvents;
class AccountsProjector implements Projector
{
use ProjectsEvents;
public function onMoneyAdded(MoneyAdded $event)
{
$account = Account::uuid($event->accountUuid);
$account->balance += $event->amount;
$account->save();
}
}
namespace App\Reactors;
use App\Account;
use App\Events\MoneyAdded;
use App\Mail\BigAmountAddedMail;
use Illuminate\Support\Facades\Mail;
use Spatie\EventSourcing\EventHandlers\EventHandler;
use Spatie\EventSourcing\EventHandlers\HandlesEvents;
class BigAmountAddedReactor implements EventHandler
{
use HandlesEvents;
public function onMoneyAdded(MoneyAdded $event)
{
if ($event->amount < 5000) {
return;
}
$account = Account::uuid($event->accountUuid);
Mail::to('[email protected]')->send(new BigAmountAddedMail($account, $event->amount));
}
}
namespace App\Projectors;
use App\Account;
use App\Events\AccountCreated;
use App\Events\AccountDeleted;
use App\Events\MoneyAdded;
use App\Events\MoneySubtracted;
use Spatie\EventSourcing\Projectors\Projector;
use Spatie\EventSourcing\Projectors\ProjectsEvents;
class AccountsProjector implements Projector
{
use ProjectsEvents;
public function onMoneyAdded(MoneyAdded $event)
{
$account = Account::uuid($event->accountUuid);
$account->balance += $event->amount;
$account->number_of_deposits += 1;
$account->save();
}
}
/**
* Listen to these streams when running `event-sourcing:subscribe`. Uses
* a comma delimetered list from the environment as default.
*/
'subscription_streams' => ['$et-Events\Quotes\QuoteConverted'],
php
namespace App\Events;
use DigitalRisks\Lese\MetaData\HasMetaData;
use DigitalRisks\Lese\MetaData\CollectsMetaData;
use DigitalRisks\Lese\MetaData\AddsHerokuMetadata;
use DigitalRisks\Lese\MetaData\AddsLaravelMetadata;
use DigitalRisks\Lese\MetaData\AddsUserMetaData;
use Spatie\EventSourcing\ShouldBeStored;
class MoneyAdded implements ShouldBeStored, HasMetaData
{
use CollectsMetaData, AddsUserMetaData, AddsHerokuMetadata, AddsLaravelMetadata;
/** @var string */
public $accountUuid;
/** @var int */
public $amount;
public function __construct(string $accountUuid, int $amount)
{
$this->accountUuid = $accountUuid;
$this->amount = $amount;
}
/** @metadata */
public function collectIpMetadata()
{
return [
'ip' => $_SERVER['REMOTE_ADDR'],
];
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.