mirror of
https://github.com/jikan-me/jikan-rest.git
synced 2025-02-20 11:23:35 +08:00
- AppServiceProvider is needs more work to wire in new services - todo: more dtos - todo: add unit tests - todo: add more integration tests
43 lines
1.0 KiB
PHP
43 lines
1.0 KiB
PHP
<?php
|
|
|
|
namespace App\Support;
|
|
|
|
use App\Contracts\DataRequest;
|
|
use App\Contracts\Mediator;
|
|
use App\Contracts\RequestHandler;
|
|
use Illuminate\Support\Collection;
|
|
|
|
final class DefaultMediator implements Mediator
|
|
{
|
|
/**
|
|
* @var Collection<string, RequestHandler> $requestHandlers
|
|
*/
|
|
private readonly Collection $requestHandlers;
|
|
|
|
public function __construct(RequestHandler ...$requestHandlers)
|
|
{
|
|
$this->requestHandlers = collect($requestHandlers)->flatMap(fn ($x) => [$x->requestClass() => $x]);
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function send(DataRequest $requestData)
|
|
{
|
|
$className = get_class($requestData);
|
|
|
|
if (!$this->requestHandlers->has($className)) {
|
|
return response()->json([
|
|
"message" => "Programmer error: Request handler not found for request."
|
|
], 500);
|
|
}
|
|
|
|
/**
|
|
* @var RequestHandler $handler
|
|
*/
|
|
$handler = $this->requestHandlers->get($className);
|
|
|
|
return $handler->handle($requestData);
|
|
}
|
|
}
|