1. Go to this page and download the library: Download andreo/eventsauce-bundle 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/ */
use EventSauce\EventSourcing\MessageConsumer;
use Andreo\EventSauceBundle\Attribute\AsSyncMessageConsumer;
use EventSauce\EventSourcing\EventConsumption\EventConsumer;
use Andreo\EventSauce\Messenger\EventConsumer\InjectedHandleMethodInflector;
use EventSauce\EventSourcing\Message;
#[AsSyncMessageConsumer(dispatcher: 'foo_dispatcher')]
final class FooBarEventConsumer extends EventConsumer
{
// copy-paste trait for inject HandleMethodInflector of EventSauce
use InjectedHandleMethodInflector;
public function __construct(
private HandleMethodInflector $handleMethodInflector
){}
public function onFooCreated(FooCreated $fooCreated, Message $message): void {
}
public function onBarCreated(BarCreated $barCreated, Message $message): void {
}
}
use Andreo\EventSauce\Messenger\EventConsumer\InjectedHandleMethodInflector;
use EventSauce\EventSourcing\EventConsumption\EventConsumer;
use EventSauce\EventSourcing\EventConsumption\HandleMethodInflector;
use Andreo\EventSauce\Messenger\Attribute\AsEventSauceMessageHandler;
use EventSauce\EventSourcing\Message;
final class FooBarEventConsumer extends EventConsumer
{
use InjectedHandleMethodInflector;
public function __construct(
private HandleMethodInflector $handleMethodInflector
)
{}
#[AsEventSauceMessageHandler(bus: 'fooBus')]
public function onFooCreated(FooCreated $fooCreated, Message $message): void
{
}
#[AsEventSauceMessageHandler(bus: 'barBus')]
public function onBarCreated(BarCreated $barCreated, Message $message): void
{
}
}
use Andreo\EventSauceBundle\Attribute\EnableAcl;
use Andreo\EventSauceBundle\Enum\MessageFilterStrategy;
use EventSauce\EventSourcing\EventConsumption\EventConsumer;
#[EnableAcl]
final class FooHandler extends EventConsumer
{
#[AsEventSauceMessageHandler(
handles: FooEvent::class // If you use a translator, "handles" must be configured.
)]
public function onFooCreated(BarEvent $barEvent): void
{
// ...
}
}
use EventSauce\EventSourcing\AntiCorruptionLayer\MessageTranslator;
use Andreo\EventSauceBundle\Attribute\AsMessageTranslator;
use EventSauce\EventSourcing\Message;
#[AsMessageTranslator]
final readonly class FooMessageTranslator implements MessageTranslator
{
public function translateMessage(Message $message): Message
{
assert($message->payload() instanceof FooEvent);
// ...
return new Message(new BarEvent());
}
}
use EventSauce\EventSourcing\AntiCorruptionLayer\MessageFilter;
use Andreo\EventSauceBundle\Attribute\AsMessageFilter;
use Andreo\EventSauceBundle\Enum\MessageFilterTrigger;
#[AsMessageFilter(MessageFilterTrigger::BEFORE_TRANSLATE)] // or after AFTER_TRANSLATE
final readonly class FooMessageFilter implements MessageFilter
{
public function allows(Message $message): bool
{
}
}
use EventSauce\EventSourcing\AntiCorruptionLayer\MessageTranslator;
use Andreo\EventSauceBundle\Attribute\AsMessageTranslator;
use EventSauce\EventSourcing\MessageConsumer;
use EventSauce\EventSourcing\MessageDispatcher;
// Translator will be using through all dispatchers as MessageDispatcher::class (or consumers as MessageConsumer::class)
// Single FooConsumer (or single FooDispatcher) uses translator also
#[AsMessageTranslator(owners: [MessageDispatcher::class, FooConsumer::class])]
final readonly class FooMessageTranslator implements MessageTranslator
{
public function translateMessage(Message $message): Message
{
}
}
use EventSauce\EventSourcing\EventDispatcher;
final readonly class FooHandler
{
public function __construct(
private EventDispatcher $eventDispatcher
) {
}
public function handle(): void
{
$this->eventDispatcher->dispatch(
new FooEvent()
);
}
}
use Andreo\EventSauceBundle\Attribute\AsUpcaster;
use EventSauce\EventSourcing\Upcasting\Upcaster;
#[AsUpcaster(aggregateClass: FooAggregate::class, version: 2)]
final class FooEventV2Upcaster implements Upcaster {
public function upcast(array $message): array
{
}
}
use EventSauce\EventSourcing\Message;
use Andreo\EventSauce\Upcasting\MessageUpcaster\MessageUpcaster;
use Andreo\EventSauce\Upcasting\MessageUpcaster\Event;
use Andreo\EventSauceBundle\Attribute\AsUpcaster;
#[AsUpcaster(aggregateClass: FooAggregate::class, version: 2)]
final class SomeEventV2Upcaster implements MessageUpcaster {
#[Event(event: FooEvent::class)]
public function upcast(Message $message): Message
{
}
}
use Andreo\EventSauceBundle\Attribute\AsMessageDecorator;
use EventSauce\EventSourcing\Message;
use EventSauce\EventSourcing\MessageDecorator;
#[AsMessageDecorator]
final class FooDecorator implements MessageDecorator
{
public function decorate(Message $message): Message
{
}
}
use Symfony\Component\DependencyInjection\Attribute\Target;
use EventSauce\EventSourcing\AggregateRootRepository;
final class FooHandler {
public function __construct(
#[Target('fooRepository')] private AggregateRootRepository $fooRepository
){}
}
use Symfony\Component\DependencyInjection\Attribute\Target;
use EventSauce\EventSourcing\Snapshotting\AggregateRootRepositoryWithSnapshotting;
final class FooHandler {
public function __construct(
#[Target('fooRepository')] private AggregateRootRepositoryWithSnapshotting $fooRepository
){}
}
use EventSauce\EventSourcing\AggregateRootId;
use EventSauce\EventSourcing\AggregateRootRepository;
use Symfony\Component\DependencyInjection\Attribute\AsDecorator;
#[AsDecorator(decorates: 'fooRepository')]
final readonly class FooRepository implements AggregateRootRepository
{
public function __construct(private AggregateRootRepository $regularRepository)
{
}
public function retrieve(AggregateRootId $aggregateRootId): object
{
return $this->regularRepository->retrieve($aggregateRootId);
}
public function persist(object $aggregateRoot): void
{
// ...
}
public function persistEvents(AggregateRootId $aggregateRootId, int $aggregateRootVersion, object ...$events): void
{
// ...
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.