-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Description
From @basz on March 16, 2017 15:37
on chat
I'm thinking bout updating the middleware component to add support for queries on standard projections. Would that be useful?
sounds good
It is possible to query standard projections. One QueryStandardProjection query could do it, but we would loose out on permissions etc.. so... quick and dirty
trait StandardQueryTrait {
public function streamName(): string {
return $this->metadata()['stream_name'];
}
public function result($state) {
return $state;
}
}
abstract class QueryStandardProjection extends Messaging\Query implements Messaging\PayloadConstructable {
use Messaging\StandardQueryTrait;
}
class StandardQueryHandler {
private $projectionManager;
public function __construct(ProjectionManager $projectionManager)
{
$this-> projectionManager = $projectionManager;
}
public function onEvent(QueryStandardProjection $query, Deferred $deferred)
{
// use projectionManager to retrieve state of $query->streamName()
$deferred->resolve($query->makeResult($state));
}
}
class MyQuery extends QueryStandardProjection {
public function result($state) {
return ValueObject::fromArray($state);
}
}
routes
[
'name' => 'query::something',
'path' => '/path',
'middleware' => [
StandardQueryMiddleware::class,
],
'allowed_methods' => ['OPTION', 'GET'],
'options' => [
'values' => [
StandardQueryMiddleware::NAME_ATTRIBUTE => MyQuery::class,
StandardQueryMiddleware::STREAM_NAME => 'my_projection',
],
],
],
Which add a StandardQueryMiddleware.
It's just an rough idea... Looking for input
Copied from original issue: prooph/psr7-middleware#22
Metadata
Metadata
Assignees
Labels
No labels