diff --git a/src/Messaging/DomainMessage.php b/src/Messaging/DomainMessage.php index 41dc501..54e9cce 100644 --- a/src/Messaging/DomainMessage.php +++ b/src/Messaging/DomainMessage.php @@ -54,7 +54,7 @@ abstract class DomainMessage implements HasMessageName protected $metadata = array(); /** - * Should be either MessageHeader::TYPE_COMMAND or MessageHeader::TYPE_EVENT + * Should be either MessageHeader::TYPE_COMMAND or MessageHeader::TYPE_EVENT or MessageHeader::TYPE_QUERY * * @return string */ @@ -105,7 +105,7 @@ public static function fromRemoteMessage(RemoteMessage $message) } /** - * We force implementors to provide a meaningful factory method or use the fromArray or fromRemoteMessage methods + * We force implementers to provide a meaningful factory method or use the fromArray or fromRemoteMessage methods * * @param string $messageName * @param null $payload diff --git a/src/Messaging/MessageHeader.php b/src/Messaging/MessageHeader.php index 31b7be1..215d9fb 100644 --- a/src/Messaging/MessageHeader.php +++ b/src/Messaging/MessageHeader.php @@ -26,6 +26,7 @@ final class MessageHeader { const TYPE_COMMAND = 'command'; const TYPE_EVENT = 'event'; + const TYPE_QUERY = 'query'; /** * @var Uuid @@ -94,7 +95,7 @@ public function __construct(Uuid $uuid, \DateTimeImmutable $createdAt, $version, Assertion::notEmpty($version, 'MessageHeader.version must not be empty'); Assertion::integer($version, 'MessageHeader.version must be an integer'); - Assertion::inArray($type, [self::TYPE_COMMAND, self::TYPE_EVENT], 'MessageHeader.type must be command or event'); + Assertion::inArray($type, [self::TYPE_COMMAND, self::TYPE_EVENT, self::TYPE_QUERY], 'MessageHeader.type must be command, query or event'); $this->uuid = $uuid; $this->createdAt = $createdAt; diff --git a/src/Messaging/Query.php b/src/Messaging/Query.php new file mode 100644 index 0000000..1e87ae0 --- /dev/null +++ b/src/Messaging/Query.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + * + * Date: 5/22/15 - 10:26 PM + */ +namespace Prooph\Common\Messaging; + +/** + * Class Query + * + * This is the base class for queries used to fetch data from read model. + * + * @package Prooph\Common\Messaging + * @author Alexander Miertsch + */ +class Query extends DomainMessage +{ + /** + * Should be either MessageHeader::TYPE_COMMAND or MessageHeader::TYPE_EVENT or MessageHeader::TYPE_QUERY + * + * @return string + */ + protected function messageType() + { + return MessageHeader::TYPE_QUERY; + } +} \ No newline at end of file diff --git a/tests/Messaging/QueryTest.php b/tests/Messaging/QueryTest.php new file mode 100644 index 0000000..c818147 --- /dev/null +++ b/tests/Messaging/QueryTest.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + * + * Date: 5/22/15 - 10:28 PM + */ +namespace ProophTest\Common\Messaging; + + +use Prooph\Common\Messaging\MessageHeader; +use Prooph\Common\Messaging\Query; +use Rhumsaa\Uuid\Uuid; + +final class QueryTest extends \PHPUnit_Framework_TestCase +{ + /** + * @test + */ + function it_has_the_message_type_query() + { + $query = Query::fromArray([ + 'name' => 'TestQuery', + 'uuid' => Uuid::uuid4()->toString(), + 'version' => 1, + 'created_at' => (new \DateTimeImmutable())->format(\DateTime::ISO8601), + 'payload' => ['query' => 'payload'], + 'metadata' => ['query' => 'metadata'] + ]); + + $remoteMessage = $query->toRemoteMessage(); + + $this->assertEquals(MessageHeader::TYPE_QUERY, $remoteMessage->header()->type()); + } +} \ No newline at end of file