From 014e712e9d6d59354d1d704db76afb210d5d8c8a Mon Sep 17 00:00:00 2001 From: "cristian.almohalla" Date: Mon, 11 Jul 2022 15:08:54 +0200 Subject: [PATCH 1/3] feat: allow not uuid aggregate id --- src/Util/Message/AggregateMessage.php | 32 ++++++++++++++++--- .../AggregateMessageStreamDeserializer.php | 3 +- src/Util/Message/ValueObject/AggregateId.php | 10 ++++++ 3 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 src/Util/Message/ValueObject/AggregateId.php diff --git a/src/Util/Message/AggregateMessage.php b/src/Util/Message/AggregateMessage.php index 04a3e52..bcc3fdd 100644 --- a/src/Util/Message/AggregateMessage.php +++ b/src/Util/Message/AggregateMessage.php @@ -4,17 +4,19 @@ namespace PcComponentes\Ddd\Util\Message; use PcComponentes\Ddd\Domain\Model\ValueObject\DateTimeValueObject; +use PcComponentes\Ddd\Domain\Model\ValueObject\StringValueObject; use PcComponentes\Ddd\Domain\Model\ValueObject\Uuid; +use PcComponentes\Ddd\Util\Message\ValueObject\AggregateId; abstract class AggregateMessage extends Message { - private Uuid $aggregateId; + private AggregateId $aggregateId; private DateTimeValueObject $occurredOn; private int $aggregateVersion; final protected function __construct( Uuid $messageId, - Uuid $aggregateId, + AggregateId $aggregateId, int $aggregateVersion, DateTimeValueObject $occurredOn, array $payload @@ -28,18 +30,40 @@ final protected function __construct( final public static function fromPayload( Uuid $messageId, - Uuid $aggregateId, + StringValueObject $aggregateId, DateTimeValueObject $occurredOn, array $payload, int $aggregateVersion = 0 ): self { + if (\is_a($aggregateId, Uuid::class) || \is_subclass_of($aggregateId, Uuid::class)) { + $aggregateId = AggregateId::from($aggregateId->value()); + + if(function_exists('trigger_deprecation')){ + @trigger_deprecation( + 'pccomponentes/ddd', + '3.0', + \sprintf( + "AggregateId value should be %s instance, %s given", + AggregateId::class, + \get_class($aggregateId), + ), + ); + } + } elseif (false === \is_a($aggregateId, AggregateId::class)) { + throw new \InvalidArgumentException(\sprintf( + "AggregateId value should be %s instance, %s given", + AggregateId::class, + \get_class($aggregateId), + )); + } + $message = new static($messageId, $aggregateId, $aggregateVersion, $occurredOn, $payload); $message->assertPayload(); return $message; } - final public function aggregateId(): Uuid + final public function aggregateId(): AggregateId { return $this->aggregateId; } diff --git a/src/Util/Message/Serialization/JsonApi/AggregateMessageStreamDeserializer.php b/src/Util/Message/Serialization/JsonApi/AggregateMessageStreamDeserializer.php index 0e12241..35b986b 100644 --- a/src/Util/Message/Serialization/JsonApi/AggregateMessageStreamDeserializer.php +++ b/src/Util/Message/Serialization/JsonApi/AggregateMessageStreamDeserializer.php @@ -9,6 +9,7 @@ use PcComponentes\Ddd\Util\Message\Serialization\AggregateMessageUnserializable; use PcComponentes\Ddd\Util\Message\Serialization\Exception\MessageClassNotFoundException; use PcComponentes\Ddd\Util\Message\Serialization\MessageMappingRegistry; +use PcComponentes\Ddd\Util\Message\ValueObject\AggregateId; final class AggregateMessageStreamDeserializer implements AggregateMessageUnserializable { @@ -33,7 +34,7 @@ public function unserialize($message): AggregateMessage return $eventClass::fromPayload( Uuid::from($message->messageId()), - Uuid::from($message->aggregateId()), + AggregateId::from($message->aggregateId()), DateTimeValueObject::fromTimestamp($message->occurredOn()), \json_decode($message->payload(), true, 512, \JSON_THROW_ON_ERROR), $message->aggregateVersion(), diff --git a/src/Util/Message/ValueObject/AggregateId.php b/src/Util/Message/ValueObject/AggregateId.php new file mode 100644 index 0000000..ee6d8d8 --- /dev/null +++ b/src/Util/Message/ValueObject/AggregateId.php @@ -0,0 +1,10 @@ + Date: Mon, 11 Jul 2022 16:00:46 +0200 Subject: [PATCH 2/3] Update src/Util/Message/AggregateMessage.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor: aggregate id exception message Co-authored-by: Luis Alejandro Domínguez Bueno <30509719+ladbsoft@users.noreply.github.com> --- src/Util/Message/AggregateMessage.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Util/Message/AggregateMessage.php b/src/Util/Message/AggregateMessage.php index bcc3fdd..c83ba0c 100644 --- a/src/Util/Message/AggregateMessage.php +++ b/src/Util/Message/AggregateMessage.php @@ -43,7 +43,7 @@ final public static function fromPayload( 'pccomponentes/ddd', '3.0', \sprintf( - "AggregateId value should be %s instance, %s given", + "AggregateId value should be an instance of %s, %s given", AggregateId::class, \get_class($aggregateId), ), From 2f694be370ef0b4b5ff542e68dd38fa9a5548343 Mon Sep 17 00:00:00 2001 From: "cristian.almohalla" Date: Mon, 11 Jul 2022 16:01:33 +0200 Subject: [PATCH 3/3] refactor: aggregate id exception message --- src/Util/Message/AggregateMessage.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Util/Message/AggregateMessage.php b/src/Util/Message/AggregateMessage.php index c83ba0c..7037aca 100644 --- a/src/Util/Message/AggregateMessage.php +++ b/src/Util/Message/AggregateMessage.php @@ -51,7 +51,7 @@ final public static function fromPayload( } } elseif (false === \is_a($aggregateId, AggregateId::class)) { throw new \InvalidArgumentException(\sprintf( - "AggregateId value should be %s instance, %s given", + "AggregateId value should be an instance of %s, %s given", AggregateId::class, \get_class($aggregateId), ));