File "ShouldBeStored.php"

Full Path: /var/www/html/back/vendor/spatie/laravel-event-sourcing/src/StoredEvents/ShouldBeStored.php
File size: 1.95 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace Spatie\EventSourcing\StoredEvents;

use AllowDynamicProperties;
use Carbon\CarbonImmutable;
use ReflectionClass;
use Spatie\EventSourcing\Attributes\EventVersion;
use Spatie\EventSourcing\Enums\MetaData;

#[AllowDynamicProperties]
abstract class ShouldBeStored
{
    protected array $metaData = [];

    public function eventVersion(): int
    {
        $versionAttribute = (new ReflectionClass($this))->getAttributes(EventVersion::class)[0] ?? null;

        if (! $versionAttribute) {
            return 1;
        }

        return $versionAttribute->newInstance()->version;
    }

    public function createdAt(): ?CarbonImmutable
    {
        return CarbonImmutable::make($this->metaData[MetaData::CREATED_AT] ?? null);
    }

    public function setCreatedAt(CarbonImmutable $createdAt): self
    {
        $this->metaData[MetaData::CREATED_AT] = $createdAt;

        return $this;
    }

    public function aggregateRootUuid(): ?string
    {
        return $this->metaData[MetaData::AGGREGATE_ROOT_UUID] ?? null;
    }

    public function setAggregateRootUuid(string $uuid): self
    {
        $this->metaData[MetaData::AGGREGATE_ROOT_UUID] = $uuid;

        return $this;
    }

    public function storedEventId(): ?int
    {
        return $this->metaData[MetaData::STORED_EVENT_ID] ?? null;
    }

    public function setStoredEventId(int $id): self
    {
        $this->metaData[MetaData::STORED_EVENT_ID] = $id;

        return $this;
    }

    public function aggregateRootVersion(): ?int
    {
        return $this->metaData[MetaData::AGGREGATE_ROOT_VERSION] ?? null;
    }

    public function setAggregateRootVersion(int $version): self
    {
        $this->metaData[MetaData::AGGREGATE_ROOT_VERSION] = $version;

        return $this;
    }

    public function metaData(): array
    {
        return $this->metaData;
    }

    public function setMetaData(array $metaData): self
    {
        $this->metaData = $metaData;

        return $this;
    }
}