fieldCriteria = FieldParser::parse($parameters); $this->includeCriteria = IncludeParser::parse($parameters); $this->sortCriteria = SortParser::parse($parameters); $this->filterCriteria = FilterParser::parse($parameters); $this->searchCriteria = SearchParser::parse($parameters); $this->pagingCriteria = PagingParser::parse($parameters); } /** * Get the field criteria. * * @param string $type * @return FieldCriteria|null */ public function getFieldCriteria(string $type): ?FieldCriteria { return Arr::first($this->fieldCriteria, fn (FieldCriteria $criteria) => $criteria->getType() === $type); } /** * Get include criteria. * * @param string $type * @return IncludeCriteria|null */ public function getIncludeCriteria(string $type): ?IncludeCriteria { return $this->getResourceIncludeCriteria($type) ?? Arr::first( $this->includeCriteria, fn (IncludeCriteria $criteria) => get_class($criteria) === IncludeCriteria::class ); } /** * Get the resource include criteria. * * @param string $type * @return IncludeCriteria|null */ public function getResourceIncludeCriteria(string $type): ?IncludeCriteria { return Arr::first( $this->includeCriteria, fn (IncludeCriteria $criteria) => $criteria instanceof ResourceCriteria && $criteria->getType() === $type ); } /** * Get sort criteria. * * @return SortCriteria[] */ public function getSortCriteria(): array { return $this->sortCriteria; } /** * Get filter criteria for the field. * * @return FilterCriteria[] */ public function getFilterCriteria(): array { return $this->filterCriteria; } /** * Does the query have search criteria? * * @return bool */ public function hasSearchCriteria(): bool { return ! empty($this->searchCriteria); } /** * Get search criteria. * Note: At the time of writing, the API shall only support a single search term. * * @return SearchCriteria|null */ public function getSearchCriteria(): ?SearchCriteria { return Arr::first($this->searchCriteria); } /** * Get paging criteria that matches pagination strategy. * * @param PaginationStrategy $strategy * @return PagingCriteria|null */ public function getPagingCriteria(PaginationStrategy $strategy): ?PagingCriteria { return Arr::first( $this->pagingCriteria, fn (PagingCriteria $criteria) => $strategy === $criteria->getStrategy() ); } }