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. */ public function getFieldCriteria(string $type): ?FieldCriteria { return Arr::first($this->fieldCriteria, fn (FieldCriteria $criteria): bool => $criteria->getType() === $type); } /** * Get include criteria. */ public function getIncludeCriteria(string $type): ?IncludeCriteria { return $this->getResourceIncludeCriteria($type) ?? Arr::first( $this->includeCriteria, fn (IncludeCriteria $criteria): bool => $criteria::class === IncludeCriteria::class ); } /** * Get the resource include criteria. */ public function getResourceIncludeCriteria(string $type): ?IncludeCriteria { return Arr::first( $this->includeCriteria, fn (IncludeCriteria $criteria): bool => $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? */ public function hasSearchCriteria(): bool { return $this->searchCriteria !== []; } /** * Get search criteria. * Note: At the time of writing, the API shall only support a single search term. */ public function getSearchCriteria(): ?SearchCriteria { return Arr::first($this->searchCriteria); } /** * Get paging criteria that matches pagination strategy. */ public function getPagingCriteria(PaginationStrategy $strategy): ?PagingCriteria { return Arr::first( $this->pagingCriteria, fn (PagingCriteria $criteria): bool => $strategy === $criteria->getStrategy() ); } }