From de9ef0ce6994928b7c057d0ed6f9567b9b447169 Mon Sep 17 00:00:00 2001 From: Julien Mercier-Rojas Date: Mon, 8 Nov 2021 14:43:59 +0100 Subject: [PATCH] Add interfaces for a Query Bus --- .../Exception/InvalidQueryException.php | 22 +++++++++++++++ .../Exception/QueryDispatcherException.php | 20 +++++++++++++ src/Core/QueryDispatcher/Query/Query.php | 18 ++++++++++++ .../QueryDispatcher/QueryBus/QueryBus.php | 20 +++++++++++++ .../QueryHandler/QueryHandler.php | 28 +++++++++++++++++++ 5 files changed, 108 insertions(+) create mode 100644 src/Core/QueryDispatcher/Exception/InvalidQueryException.php create mode 100644 src/Core/QueryDispatcher/Exception/QueryDispatcherException.php create mode 100644 src/Core/QueryDispatcher/Query/Query.php create mode 100644 src/Core/QueryDispatcher/QueryBus/QueryBus.php create mode 100644 src/Core/QueryDispatcher/QueryHandler/QueryHandler.php diff --git a/src/Core/QueryDispatcher/Exception/InvalidQueryException.php b/src/Core/QueryDispatcher/Exception/InvalidQueryException.php new file mode 100644 index 0000000..d90f94a --- /dev/null +++ b/src/Core/QueryDispatcher/Exception/InvalidQueryException.php @@ -0,0 +1,22 @@ + + * Created at: 08/11/2021 + */ + +declare(strict_types=1); + +namespace JeckelLab\Contract\Core\QueryDispatcher\Exception; + +use JeckelLab\Contract\Core\Exception\RuntimeException; + +/** + * Class InvalidQueryException + * @package JeckelLab\Contract\Core\QueryDispatcher\Exception + * @psalm-immutable + */ +class InvalidQueryException extends RuntimeException implements QueryDispatcherException +{ + +} diff --git a/src/Core/QueryDispatcher/Exception/QueryDispatcherException.php b/src/Core/QueryDispatcher/Exception/QueryDispatcherException.php new file mode 100644 index 0000000..1d8c7ff --- /dev/null +++ b/src/Core/QueryDispatcher/Exception/QueryDispatcherException.php @@ -0,0 +1,20 @@ + + * Created at: 08/11/2021 + */ + +declare(strict_types=1); + +namespace JeckelLab\Contract\Core\QueryDispatcher\Exception; + +use JeckelLab\Contract\Core\Exception\CoreException; + +/** + * @psalm-immutable + */ +interface QueryDispatcherException extends CoreException +{ + +} diff --git a/src/Core/QueryDispatcher/Query/Query.php b/src/Core/QueryDispatcher/Query/Query.php new file mode 100644 index 0000000..045b4f5 --- /dev/null +++ b/src/Core/QueryDispatcher/Query/Query.php @@ -0,0 +1,18 @@ + + * Created at: 08/11/2021 + */ + +declare(strict_types=1); + +namespace JeckelLab\Contract\Core\QueryDispatcher\Query; + +/** + * @psalm-immutable + */ +interface Query +{ + +} diff --git a/src/Core/QueryDispatcher/QueryBus/QueryBus.php b/src/Core/QueryDispatcher/QueryBus/QueryBus.php new file mode 100644 index 0000000..c261e55 --- /dev/null +++ b/src/Core/QueryDispatcher/QueryBus/QueryBus.php @@ -0,0 +1,20 @@ + + * Created at: 08/11/2021 + */ + +namespace JeckelLab\Contract\Core\QueryDispatcher\QueryBus; + +use JeckelLab\Contract\Core\QueryDispatcher\Query\Query; +use JeckelLab\Contract\Presentation\ViewModel\ViewModel; + +interface QueryBus +{ + /** + * @param Query $query + * @return ViewModel + */ + public function dispatch(Query $query): ViewModel; +} diff --git a/src/Core/QueryDispatcher/QueryHandler/QueryHandler.php b/src/Core/QueryDispatcher/QueryHandler/QueryHandler.php new file mode 100644 index 0000000..9ee5d16 --- /dev/null +++ b/src/Core/QueryDispatcher/QueryHandler/QueryHandler.php @@ -0,0 +1,28 @@ + + * Created at: 08/11/2021 + */ + +namespace JeckelLab\Contract\Core\QueryDispatcher\QueryHandler; + +use JeckelLab\Contract\Core\QueryDispatcher\Exception\InvalidQueryException; +use JeckelLab\Contract\Core\QueryDispatcher\Query\Query; +use JeckelLab\Contract\Presentation\ViewModel\ViewModel; + +interface QueryHandler +{ + /** + * @return array> + * @psalm-mutation-free + */ + public static function getHandledQueries(): array; + + /** + * @param Query $query + * @return ViewModel + * @throws InvalidQueryException + */ + public function __invoke(Query $query): ViewModel; +}