provideCollection($operation, $uriVariables, $context); case $operation instanceof Patch: case $operation instanceof Put: return $this->provideInput($operation, $uriVariables, $context); case $operation instanceof Get: return $this->provideItem($operation, $uriVariables, $context); } } private function provideCollection(Operation $operation, array $uriVariables = [], array $context = []): object { $paginator = $this->collectionProvider->provide($operation, $uriVariables, $context); $items = new \ArrayObject(); foreach ($paginator->getIterator() as $item){ $items[] = new OrganizationalUnitOutput($item); } return new TraversablePaginator($items, $paginator->getCurrentPage(), $paginator->getItemsPerPage(), $paginator->getTotalItems()); } public function provideItem(Operation $operation, array $uriVariables = [], array $context = []): object|array|null { $item = $this->itemProvider->provide($operation, $uriVariables, $context); if (!$item) { throw new NotFoundHttpException('Organizational unit not found'); } return new OrganizationalUnitOutput($item); } public function provideInput(Operation $operation, array $uriVariables = [], array $context = []): object|array|null { $input = null; if (isset($uriVariables['uuid'])) { $item = $this->itemProvider->provide($operation, $uriVariables, $context); if ( $item !== null ) { switch ($item->getType()) { case OrganizationalUnitTypes::ORGANIZATIONAL_UNIT: $input = new OrganizationalUnitRootInput($item); break; case OrganizationalUnitTypes::CLASSROOMS_GROUP: $input = new OrganizationalUnitClassroomGroupInput($item); break; case OrganizationalUnitTypes::CLIENTS_GROUP: $input = new OrganizationalUnitClientGroupInput($item); break; case OrganizationalUnitTypes::CLASSROOM; $input = new OrganizationalUnitClassroomInput($item); } } return $input; } } }