jikan-rest/app/Support/DefaultMediator.php
pushrbx a145f18bbd wip - major refactor
- AppServiceProvider is needs more work to wire in new services
- todo: more dtos
- todo: add unit tests
- todo: add more integration tests
2023-05-21 11:14:34 +01:00

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);
}
}