src/App/Model/Query/ConditionQuery/ConditionSchema.php line 152

Open in your IDE?
  1. <?php
  2. namespace App\Model\Query\ConditionQuery;
  3. use JsonSerializable;
  4. /**
  5.  * Represents the configuration of a single type of filter.
  6.  *
  7.  * @see https://coda.io/d/_diyKeRjYYS-/Flexible-Messaging-Prototype_suNzV#_luVi2
  8.  */
  9. final class ConditionSchema implements JsonSerializable
  10. {
  11.     use ConditionFilterTrait;
  12.     /**
  13.      * @var ConditionConfig|null
  14.      */
  15.     private ?ConditionConfig $conditionConfig null;
  16.     /**
  17.      * @var string|null
  18.      */
  19.     private ?string $category null;
  20.     /**
  21.      * @var string|null
  22.      */
  23.     private ?string $name null;
  24.     /**
  25.      * @var AbstractType|null
  26.      */
  27.     private ?AbstractType $type null;
  28.     /**
  29.      * @param string|null $filter
  30.      * @param string|null $name
  31.      * @param AbstractType|null $type
  32.      */
  33.     public function __construct(
  34.         ?string $filter null,
  35.         ?string $name null,
  36.         ?AbstractType $type null
  37.     )
  38.     {
  39.         $this
  40.             ->setFilter($filter)
  41.             ->setName($name)
  42.             ->setType($type);
  43.     }
  44.     /**
  45.      * @return string|null
  46.      */
  47.     public function getName(): ?string
  48.     {
  49.         return $this->name;
  50.     }
  51.     /**
  52.      * @param string|null $name
  53.      * @return $this
  54.      */
  55.     public function setName(?string $name): self
  56.     {
  57.         $this->name $name ?: null;
  58.         return $this;
  59.     }
  60.     /**
  61.      * @return string|null
  62.      */
  63.     public function getCategory(): ?string
  64.     {
  65.         return $this->category;
  66.     }
  67.     /**
  68.      * @param string|null $category
  69.      * @return $this
  70.      */
  71.     public function setCategory(?string $category): self
  72.     {
  73.         $this->category $category ?: null;
  74.         return $this;
  75.     }
  76.     /**
  77.      * @return AbstractType|null
  78.      */
  79.     public function getType(): ?AbstractType
  80.     {
  81.         return $this->type;
  82.     }
  83.     /**
  84.      * @param AbstractType|null $type
  85.      * @return $this
  86.      */
  87.     public function setType(?AbstractType $type): self
  88.     {
  89.         $this->type $type;
  90.         return $this;
  91.     }
  92.     /**
  93.      * {@inheritDoc}
  94.      */
  95.     public function jsonSerialize(): array
  96.     {
  97.         return [
  98.             'filter' => $this->getFilter(),
  99.             'category' => $this->getCategory(),
  100.             'name' => $this->getName(),
  101.             'type' => $this->getType()->jsonSerialize(),
  102.         ];
  103.     }
  104.     /**
  105.      * @param array $serialized
  106.      * @return $this
  107.      */
  108.     public function jsonUnserialize(array $serialized): self
  109.     {
  110.         return $this
  111.             ->setFilter($serialized['filter'] ?? null)
  112.             ->setCategory($serialized['category'] ?? null)
  113.             ->setName($serialized['name'] ?? null)
  114.             ->setType(
  115.                 $serialized['type'] ? AbstractType::factory(
  116.                     $serialized['type'],
  117.                 ) : null,
  118.             );
  119.     }
  120.     /**
  121.      * @param array $serialized
  122.      * @return ConditionSchema
  123.      */
  124.     static public function factory(array $serialized): ConditionSchema
  125.     {
  126.         if ( ! isset($serialized['filter']) || ! is_string($serialized['filter'])) {
  127.             throw new \Exception('Invalid filter');
  128.         }
  129.         if ( ! isset($serialized['name']) || ! is_string($serialized['name'])) {
  130.             throw new \Exception('Invalid name');
  131.         }
  132.         if ( ! isset($serialized['type'])) {
  133.             throw new \Exception('Invalid type');
  134.         }
  135.         return (new ConditionSchema())->jsonUnserialize($serialized);
  136.     }
  137.     /**
  138.      * @return void
  139.      */
  140.     public function __clone()
  141.     {
  142.         $this->conditionConfig null;
  143.     }
  144.     /**
  145.      * @return ConditionConfig|null
  146.      */
  147.     public function getConditionConfig(): ?ConditionConfig
  148.     {
  149.         return $this->conditionConfig;
  150.     }
  151.     /**
  152.      * @param ConditionConfig|null $conditionConfig
  153.      * @return $this
  154.      */
  155.     public function setConditionConfig(?ConditionConfig $conditionConfig): self
  156.     {
  157.         if ($conditionConfig && $this->conditionConfig) {
  158.             throw new \Exception('Schema has already been assigned to a configuration.');
  159.         }
  160.         $this->conditionConfig $conditionConfig;
  161.         return $this;
  162.     }
  163. }