2026-08-12 15:45:29 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
namespace Presentation\Api\V1\Http\Controllers\Employees;
|
|
|
|
|
|
|
|
|
|
use Application\Usecase\Employees\Find\FindEmployee;
|
2026-08-13 09:55:27 +02:00
|
|
|
use Application\Usecase\Employees\Find\Input;
|
2026-08-14 11:50:12 +02:00
|
|
|
use Presentation\Api\V1\Contracts\ApiResponse;
|
2026-08-12 15:45:29 +02:00
|
|
|
use Presentation\Api\V1\Http\Requests\Employees\EmployeeShowRequest;
|
|
|
|
|
use Presentation\Api\V1\Http\Responses\Employees\EmployeeShowResponse;
|
2026-08-12 16:59:50 +02:00
|
|
|
use Presentation\Api\V1\Presenters\Employees\EmployeeShowPresenter;
|
2026-08-12 15:45:29 +02:00
|
|
|
use Shared\DDD\Usecase\Builder\UsecaseBuilder;
|
|
|
|
|
use Shared\DDD\Usecase\Builder\UsecaseExecutor;
|
|
|
|
|
|
|
|
|
|
final readonly class EmployeeShowController
|
|
|
|
|
{
|
|
|
|
|
/** @param UsecaseExecutor<\Shared\DDD\Usecase\Input, \Shared\DDD\Usecase\Output> $executor */
|
|
|
|
|
public function __construct(
|
|
|
|
|
private FindEmployee $usecase,
|
|
|
|
|
private UsecaseExecutor $executor,
|
|
|
|
|
private EmployeeShowPresenter $presenter,
|
|
|
|
|
) {
|
|
|
|
|
}
|
|
|
|
|
|
2026-08-14 11:50:12 +02:00
|
|
|
public function __invoke(EmployeeShowRequest $request): ApiResponse
|
2026-08-12 15:45:29 +02:00
|
|
|
{
|
|
|
|
|
$response = UsecaseBuilder::using($this->executor)
|
|
|
|
|
->do($this->usecase)
|
2026-08-13 09:55:27 +02:00
|
|
|
->from($this->toInput($request))
|
2026-08-12 15:45:29 +02:00
|
|
|
->with($this->presenter)
|
|
|
|
|
->run();
|
|
|
|
|
|
2026-08-14 11:50:12 +02:00
|
|
|
return new EmployeeShowResponse($response);
|
2026-08-12 15:45:29 +02:00
|
|
|
}
|
2026-08-13 09:55:27 +02:00
|
|
|
|
|
|
|
|
private function toInput(EmployeeShowRequest $request): Input
|
|
|
|
|
{
|
|
|
|
|
return new Input(
|
|
|
|
|
id: $request->employeeId(),
|
|
|
|
|
);
|
|
|
|
|
}
|
2026-08-12 15:45:29 +02:00
|
|
|
}
|