| Total Complexity | 15 |
| Total Lines | 99 |
| Duplicated Lines | 0 % |
| Changes | 0 | ||
| 1 | <?php |
||
| 27 | class StatusCheckRetriever implements ApiResourceRetrieverInterface, SearchFilterProviderInterface |
||
| 28 | { |
||
| 29 | private $statusChecks; |
||
| 30 | |||
| 31 | /** |
||
| 32 | * @param (StatusCheckInterface|StatusCheckListInterface)[] $statusChecks |
||
| 33 | */ |
||
| 34 | public function __construct(iterable $statusChecks) |
||
| 35 | { |
||
| 36 | $this->statusChecks = $statusChecks; |
||
| 37 | } |
||
| 38 | |||
| 39 | /** |
||
| 40 | * Iterates over all status checks and creates a generator for it. |
||
| 41 | * |
||
| 42 | * @return Generator |
||
| 43 | */ |
||
| 44 | private function iterate(): Generator |
||
| 45 | { |
||
| 46 | foreach ($this->statusChecks as $statusCheck) { |
||
| 47 | $check = false; |
||
| 48 | if ($statusCheck instanceof StatusCheckInterface) { |
||
| 49 | $check = true; |
||
| 50 | yield $statusCheck->getStatus(); |
||
| 51 | } |
||
| 52 | if ($statusCheck instanceof StatusCheckListInterface) { |
||
| 53 | $check = true; |
||
| 54 | foreach ($statusCheck as $check) { |
||
| 55 | if ($check instanceof Status) { |
||
| 56 | yield $check; |
||
| 57 | } else if ($check instanceof StatusCheckInterface) { |
||
| 58 | yield $check->getStatus(); |
||
| 59 | } else { |
||
| 60 | throw new InvalidClassTypeException(get_class($check), 'StatusCheckInterface or Status'); |
||
| 61 | } |
||
| 62 | } |
||
| 63 | } |
||
| 64 | if (!$check) { |
||
| 65 | throw new InvalidClassTypeException(get_class($statusCheck), 'StatusCheckInterface or StatusCheckListInterface'); |
||
| 66 | } |
||
| 67 | } |
||
| 68 | } |
||
| 69 | |||
| 70 | /** |
||
| 71 | * Finds the correct status check or throw a 404 if it could not be found. |
||
| 72 | * |
||
| 73 | * @param string $resourceClass |
||
| 74 | * @param mixed $id |
||
| 75 | * @param array $context |
||
| 76 | * @return Status |
||
| 77 | */ |
||
| 78 | public function retrieve(string $resourceClass, $id, array $context) |
||
| 86 | } |
||
| 87 | |||
| 88 | /** |
||
| 89 | * Return all status check results. |
||
| 90 | * |
||
| 91 | * @param string $resourceClass |
||
| 92 | * @param array $context |
||
| 93 | * @param SearchFilterRequest $searchFilterRequest |
||
| 94 | * @return Pagerfanta |
||
| 95 | */ |
||
| 96 | public function retrieveAll(string $resourceClass, array $context, SearchFilterRequest $searchFilterRequest): iterable |
||
| 97 | { |
||
| 98 | $iterator = new RewindableGenerator(function () { |
||
| 99 | return $this->iterate(); |
||
| 100 | }); |
||
| 101 | if (array_key_exists('status', $searchFilterRequest->getSearches())) { |
||
| 102 | $filter = function (Status $status) use ($searchFilterRequest) { |
||
| 103 | return $status->getStatus() === $searchFilterRequest->getSearches()['status']; |
||
| 104 | }; |
||
| 105 | $iterator = new CallbackFilterIterator( |
||
| 106 | $iterator, |
||
| 107 | $filter |
||
| 108 | ); |
||
| 109 | } |
||
| 110 | $paginator = new Pagerfanta(new StatusCheckPager($iterator)); |
||
| 111 | $searchFilterRequest->updatePaginator($paginator); |
||
| 112 | return $paginator; |
||
| 113 | } |
||
| 114 | |||
| 115 | /** |
||
| 116 | * Retrieves search filter for an api resource. |
||
| 117 | * |
||
| 118 | * @param ApiResourceClassMetadata $classMetadata |
||
| 119 | * @return SearchFilter |
||
| 120 | */ |
||
| 121 | public function getSearchFilter(ApiResourceClassMetadata $classMetadata): SearchFilter |
||
| 126 | } |
||
| 127 | } |
||
| 128 |