<?php namespace IQDEV\ElasticSearch\Order; use IQDEV\ElasticSearch\Document\Property\Property; use IQDEV\ElasticSearch\Document\Property\PropertyType; use IQDEV\ElasticSearch\Order\Type\BaseOrder; use IQDEV\ElasticSearch\Order\Type\KeywordPropertyOrder; use IQDEV\ElasticSearch\Order\Type\NumberPropertyOrder; class OrderFactory { public static function createByProperty( Property $property, OrderDirection $direction, ): Order { match ($property->getType()) { PropertyType::KEYWORD => $order = new KeywordPropertyOrder($property, $direction), PropertyType::NUMBER => $order = new NumberPropertyOrder($property, $direction), default => $order = new BaseOrder($property, $direction), }; return $order; } }