*/ interface ProductDirectory extends Directory { public function find(ProductId $id): ?Product; public function findBySlug(string $slug): ?Product; /** * @return \Domain\Models\ValueObjects\Products\ProductSummary[] */ public function getAllProductsSummaries(): array; /** * @return LengthAwarePaginator */ public function getPaginatedProducts( Pagination $pagination, string $search = '', ): LengthAwarePaginator; /** * @param \Domain\Models\ValueObjects\Products\BreedingMethod[] $breedingMethods * @param \Domain\Models\ValueObjects\Products\Technology[] $technologies * @param \Domain\Models\ValueObjects\Products\Business[] $businesses */ public function getCategoryProducts( ProductCategory $category, array $breedingMethods = [], array $technologies = [], array $businesses = [], ?bool $isEgalim = null, string $search = '', int $limitPerCategory = 6 ): ?CategoryProductsDto; /** @return \Domain\Models\Entities\Product[] */ public function getRelatedProducts(RecipeId $recipeId, int $limit = 4): array; }