<?php
|
namespace JVBase\managers\SEO;
|
|
|
/**
|
* Type Builder - Fluent API for schema type definitions
|
*/
|
class TypeBuilder
|
{
|
private SchemaBuilder $schema;
|
private string $name;
|
private array $definition = [
|
'fields' => [],
|
];
|
|
public function __construct(SchemaBuilder $schema, string $name)
|
{
|
$this->schema = $schema;
|
$this->name = $name;
|
}
|
|
public function label(string $label): self
|
{
|
$this->definition['label'] = $label;
|
return $this;
|
}
|
|
public function group(string $group): self
|
{
|
$this->definition['group'] = $group;
|
return $this;
|
}
|
|
public function extends(string $parentType): self
|
{
|
$this->definition['extends'] = $parentType;
|
return $this;
|
}
|
|
public function fields(array $fields): self
|
{
|
$this->definition['fields'] = $fields;
|
return $this;
|
}
|
|
public function addField(string $field): self
|
{
|
$this->definition['fields'][] = $field;
|
return $this;
|
}
|
|
public function addFields(array $fields): self
|
{
|
$this->definition['fields'] = array_merge($this->definition['fields'], $fields);
|
return $this;
|
}
|
|
/**
|
* Override a specific field's definition for this type
|
*/
|
public function field(string $fieldName): FieldOverrideBuilder
|
{
|
return new FieldOverrideBuilder($this, $fieldName);
|
}
|
|
/**
|
* Internal: Store field override
|
*/
|
public function setFieldOverride(string $fieldName, array $overrides): self
|
{
|
if (!isset($this->definition['fieldOverrides'])) {
|
$this->definition['fieldOverrides'] = [];
|
}
|
$this->definition['fieldOverrides'][$fieldName] = $overrides;
|
return $this;
|
}
|
|
/**
|
* Finish building and register the type
|
*/
|
public function __destruct()
|
{
|
$this->schema->registerType($this->name, $this->definition);
|
}
|
}
|