2026-08-12 15:45:29 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
namespace Presentation\Api\V1\Http\Controllers\Employees;
|
|
|
|
|
|
|
|
|
|
use Application\Usecase\Employees\FindAll\FindAllEmployees;
|
2026-08-13 09:55:27 +02:00
|
|
|
use Application\Usecase\Employees\FindAll\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\EmployeesIndexRequest;
|
|
|
|
|
use Presentation\Api\V1\Http\Responses\Employees\EmployeesIndexResponse;
|
2026-08-12 16:59:50 +02:00
|
|
|
use Presentation\Api\V1\Presenters\Employees\EmployeesIndexPresenter;
|
2026-08-12 15:45:29 +02:00
|
|
|
use Shared\DDD\Usecase\Builder\UsecaseBuilder;
|
|
|
|
|
use Shared\DDD\Usecase\Builder\UsecaseExecutor;
|
|
|
|
|
|
|
|
|
|
final readonly class EmployeesIndexController
|
|
|
|
|
{
|
|
|
|
|
/** @param UsecaseExecutor<\Shared\DDD\Usecase\Input, \Shared\DDD\Usecase\Output> $executor */
|
|
|
|
|
public function __construct(
|
|
|
|
|
private FindAllEmployees $usecase,
|
|
|
|
|
private UsecaseExecutor $executor,
|
|
|
|
|
private EmployeesIndexPresenter $presenter,
|
|
|
|
|
) {
|
|
|
|
|
}
|
|
|
|
|
|
2026-08-14 11:50:12 +02:00
|
|
|
public function __invoke(EmployeesIndexRequest $request): ApiResponse
|
2026-08-12 15:45:29 +02:00
|
|
|
{
|
2026-08-14 11:50:12 +02:00
|
|
|
$input = $this->inputFrom($request);
|
2026-08-13 09:55:27 +02:00
|
|
|
|
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($input)
|
2026-08-12 15:45:29 +02:00
|
|
|
->with($this->presenter)
|
|
|
|
|
->run();
|
|
|
|
|
|
2026-08-17 09:30:21 +02:00
|
|
|
return new EmployeesIndexResponse($response, $request->toUri());
|
2026-08-14 11:50:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function inputFrom(EmployeesIndexRequest $request): Input
|
|
|
|
|
{
|
|
|
|
|
return new Input(
|
|
|
|
|
pagination: $request->pagination(),
|
|
|
|
|
sorter: $request->sorter(),
|
|
|
|
|
filter: $request->filter(),
|
|
|
|
|
);
|
2026-08-12 15:45:29 +02:00
|
|
|
}
|
|
|
|
|
}
|