Skip to content

Commit 5037487

Browse files
vjikviktorproggerclaude
authored
Remove PushRequest (#268)
* Remove adapter from `PushRequest` * Remove `PushRequest` * Fix tests after merge: replace PushRequest with MessageInterface in support classes --------- Co-authored-by: viktorprogger <viktorprogger@gmail.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 0d7db18 commit 5037487

19 files changed

Lines changed: 132 additions & 211 deletions

src/Middleware/Push/AdapterPushHandler.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,20 @@
44

55
namespace Yiisoft\Queue\Middleware\Push;
66

7+
use Yiisoft\Queue\Adapter\AdapterInterface;
8+
use Yiisoft\Queue\Message\MessageInterface;
9+
710
/**
811
* @internal
912
*/
1013
final class AdapterPushHandler implements MessageHandlerPushInterface
1114
{
12-
public function handlePush(PushRequest $request): PushRequest
15+
public function __construct(
16+
private readonly AdapterInterface $adapter,
17+
) {}
18+
19+
public function handlePush(MessageInterface $message): MessageInterface
1320
{
14-
return $request->withMessage(
15-
$request->getAdapter()->push(
16-
$request->getMessage(),
17-
),
18-
);
21+
return $this->adapter->push($message);
1922
}
2023
}

src/Middleware/Push/Implementation/IdMiddleware.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,22 @@
55
namespace Yiisoft\Queue\Middleware\Push\Implementation;
66

77
use Yiisoft\Queue\Message\IdEnvelope;
8-
use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface;
9-
use Yiisoft\Queue\Middleware\Push\PushRequest;
8+
use Yiisoft\Queue\Message\MessageInterface;
109
use Yiisoft\Queue\Middleware\Push\MessageHandlerPushInterface;
10+
use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface;
1111

1212
/**
1313
* A middleware for message ID setting.
1414
*/
1515
final class IdMiddleware implements MiddlewarePushInterface
1616
{
17-
public function processPush(PushRequest $request, MessageHandlerPushInterface $handler): PushRequest
17+
public function processPush(MessageInterface $message, MessageHandlerPushInterface $handler): MessageInterface
1818
{
19-
$meta = $request->getMessage()->getMetadata();
19+
$meta = $message->getMetadata();
2020
if (empty($meta[IdEnvelope::MESSAGE_ID_KEY])) {
21-
$request = $request->withMessage(new IdEnvelope($request->getMessage(), uniqid('yii3-message-', true)));
21+
$message = new IdEnvelope($message, uniqid('yii3-message-', true));
2222
}
2323

24-
return $handler->handlePush($request);
24+
return $handler->handlePush($message);
2525
}
2626
}

src/Middleware/Push/MessageHandlerPushInterface.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
namespace Yiisoft\Queue\Middleware\Push;
66

7+
use Yiisoft\Queue\Message\MessageInterface;
8+
79
interface MessageHandlerPushInterface
810
{
9-
public function handlePush(PushRequest $request): PushRequest;
11+
public function handlePush(MessageInterface $message): MessageInterface;
1012
}

src/Middleware/Push/MiddlewareFactoryPush.php

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Psr\Container\ContainerInterface;
88
use Yiisoft\Injector\Injector;
9+
use Yiisoft\Queue\Message\MessageInterface;
910
use Yiisoft\Queue\Middleware\InvalidMiddlewareDefinitionException;
1011
use Yiisoft\Queue\Middleware\MiddlewareFactory;
1112

@@ -22,16 +23,16 @@ final class MiddlewareFactoryPush extends MiddlewareFactory implements Middlewar
2223
*
2324
* - A middleware object.
2425
* - A name of a middleware class. The middleware instance will be obtained from container and executed.
25-
* - A callable with `function(ServerRequestInterface $request, RequestHandlerInterface $handler):
26-
* ResponseInterface` signature.
26+
* - A callable with `function(MessageInterface $message, MessageHandlerPushInterface $handler):
27+
* MessageInterface` signature.
2728
* - A controller handler action in format `[TestController::class, 'index']`. `TestController` instance will
2829
* be created and `index()` method will be executed.
2930
* - A function returning a middleware. The middleware returned will be executed.
3031
*
3132
* For handler action and callable
3233
* typed parameters are automatically injected using dependency injection container.
33-
* Current request and handler could be obtained by type-hinting for {@see ServerRequestInterface}
34-
* and {@see RequestHandlerInterface}.
34+
* Current message and handler could be obtained by type-hinting for {@see MessageInterface}
35+
* and {@see MessageHandlerPushInterface}.
3536
*
3637
* @throws InvalidMiddlewareDefinitionException
3738
*
@@ -70,15 +71,15 @@ public function __construct(
7071
$this->callback = $callback;
7172
}
7273

73-
public function processPush(PushRequest $request, MessageHandlerPushInterface $handler): PushRequest
74+
public function processPush(MessageInterface $message, MessageHandlerPushInterface $handler): MessageInterface
7475
{
75-
$response = (new Injector($this->container))->invoke($this->callback, [$request, $handler]);
76-
if ($response instanceof PushRequest) {
76+
$response = (new Injector($this->container))->invoke($this->callback, [$message, $handler]);
77+
if ($response instanceof MessageInterface) {
7778
return $response;
7879
}
7980

8081
if ($response instanceof MiddlewarePushInterface) {
81-
return $response->processPush($request, $handler);
82+
return $response->processPush($message, $handler);
8283
}
8384

8485
throw new InvalidMiddlewareDefinitionException($this->callback);

src/Middleware/Push/MiddlewarePushInterface.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
namespace Yiisoft\Queue\Middleware\Push;
66

7+
use Yiisoft\Queue\Message\MessageInterface;
8+
79
interface MiddlewarePushInterface
810
{
9-
public function processPush(PushRequest $request, MessageHandlerPushInterface $handler): PushRequest;
11+
public function processPush(MessageInterface $message, MessageHandlerPushInterface $handler): MessageInterface;
1012
}

src/Middleware/Push/MiddlewarePushStack.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Yiisoft\Queue\Middleware\Push;
66

77
use Closure;
8+
use Yiisoft\Queue\Message\MessageInterface;
89

910
final class MiddlewarePushStack implements MessageHandlerPushInterface
1011
{
@@ -26,14 +27,14 @@ public function __construct(
2627
private readonly MessageHandlerPushInterface $finishHandler,
2728
) {}
2829

29-
public function handlePush(PushRequest $request): PushRequest
30+
public function handlePush(MessageInterface $message): MessageInterface
3031
{
3132
if ($this->stack === null) {
3233
$this->build();
3334
}
3435

3536
/** @psalm-suppress PossiblyNullReference */
36-
return $this->stack->handlePush($request);
37+
return $this->stack->handlePush($message);
3738
}
3839

3940
private function build(): void
@@ -60,13 +61,13 @@ public function __construct(
6061
private readonly MessageHandlerPushInterface $handler,
6162
) {}
6263

63-
public function handlePush(PushRequest $request): PushRequest
64+
public function handlePush(MessageInterface $message): MessageInterface
6465
{
6566
if ($this->middleware === null) {
6667
$this->middleware = ($this->middlewareFactory)();
6768
}
6869

69-
return $this->middleware->processPush($request, $this->handler);
70+
return $this->middleware->processPush($message, $this->handler);
7071
}
7172
};
7273
}

src/Middleware/Push/PushMiddlewareDispatcher.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Yiisoft\Queue\Middleware\Push;
66

77
use Closure;
8+
use Yiisoft\Queue\Message\MessageInterface;
89

910
final class PushMiddlewareDispatcher
1011
{
@@ -27,20 +28,20 @@ public function __construct(
2728
}
2829

2930
/**
30-
* Dispatch request through middleware to get response.
31+
* Dispatch message through middleware to get response.
3132
*
32-
* @param PushRequest $request Request to pass to middleware.
33+
* @param MessageInterface $message Message to pass to middleware.
3334
* @param MessageHandlerPushInterface $finishHandler Handler to use in case no middleware produced a response.
3435
*/
3536
public function dispatch(
36-
PushRequest $request,
37+
MessageInterface $message,
3738
MessageHandlerPushInterface $finishHandler,
38-
): PushRequest {
39+
): MessageInterface {
3940
if ($this->stack === null) {
4041
$this->stack = new MiddlewarePushStack($this->buildMiddlewares(), $finishHandler);
4142
}
4243

43-
return $this->stack->handlePush($request);
44+
return $this->stack->handlePush($message);
4445
}
4546

4647
/**

src/Middleware/Push/PushRequest.php

Lines changed: 0 additions & 42 deletions
This file was deleted.

src/Queue.php

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
use Yiisoft\Queue\Middleware\Push\MessageHandlerPushInterface;
1414
use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface;
1515
use Yiisoft\Queue\Middleware\Push\PushMiddlewareDispatcher;
16-
use Yiisoft\Queue\Middleware\Push\PushRequest;
1716
use Yiisoft\Queue\Worker\WorkerInterface;
1817
use Yiisoft\Queue\Message\IdEnvelope;
1918
use Yiisoft\Queue\Provider\QueueProviderInterface;
@@ -38,7 +37,7 @@ public function __construct(
3837
) {
3938
$this->name = StringNormalizer::normalize($name);
4039
$this->middlewareDefinitions = $middlewareDefinitions;
41-
$this->adapterPushHandler = new AdapterPushHandler();
40+
$this->adapterPushHandler = new AdapterPushHandler($this->adapter);
4241
}
4342

4443
public function getName(): string
@@ -55,10 +54,10 @@ public function push(
5554
['messageType' => $message->getType()],
5655
);
5756

58-
$request = new PushRequest($message, $this->adapter);
59-
$message = $this->pushMiddlewareDispatcher
60-
->dispatch($request, $this->createPushHandler(...$middlewareDefinitions))
61-
->getMessage();
57+
$message = $this->pushMiddlewareDispatcher->dispatch(
58+
$message,
59+
$this->createPushHandler(...$middlewareDefinitions),
60+
);
6261

6362
/** @var string $messageId */
6463
$messageId = $message->getMetadata()[IdEnvelope::MESSAGE_ID_KEY] ?? 'null';
@@ -145,11 +144,11 @@ public function __construct(
145144
private readonly array $middlewares,
146145
) {}
147146

148-
public function handlePush(PushRequest $request): PushRequest
147+
public function handlePush(MessageInterface $message): MessageInterface
149148
{
150149
return $this->dispatcher
151150
->withMiddlewares($this->middlewares)
152-
->dispatch($request, $this->adapterPushHandler);
151+
->dispatch($message, $this->adapterPushHandler);
153152
}
154153
};
155154
}

tests/Integration/Support/TestMiddleware.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,23 @@
55
namespace Yiisoft\Queue\Tests\Integration\Support;
66

77
use Yiisoft\Queue\Message\Message;
8+
use Yiisoft\Queue\Message\MessageInterface;
89
use Yiisoft\Queue\Middleware\Consume\ConsumeRequest;
910
use Yiisoft\Queue\Middleware\Consume\MessageHandlerConsumeInterface;
1011
use Yiisoft\Queue\Middleware\Consume\MiddlewareConsumeInterface;
1112
use Yiisoft\Queue\Middleware\Push\MessageHandlerPushInterface;
1213
use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface;
13-
use Yiisoft\Queue\Middleware\Push\PushRequest;
1414

1515
final class TestMiddleware implements MiddlewarePushInterface, MiddlewareConsumeInterface
1616
{
1717
public function __construct(private readonly string $stage) {}
1818

19-
public function processPush(PushRequest $request, MessageHandlerPushInterface $handler): PushRequest
19+
public function processPush(MessageInterface $message, MessageHandlerPushInterface $handler): MessageInterface
2020
{
21-
$message = $request->getMessage();
2221
$stack = $message->getData();
2322
$stack[] = $this->stage;
24-
$messageNew = new Message($message->getType(), $stack);
2523

26-
return $handler->handlePush($request->withMessage($messageNew));
24+
return $handler->handlePush(new Message($message->getType(), $stack));
2725
}
2826

2927
public function processConsume(ConsumeRequest $request, MessageHandlerConsumeInterface $handler): ConsumeRequest

0 commit comments

Comments
 (0)