['project:read'], 'swagger_definition_name' => 'Read', ], denormalizationContext: [ 'groups' => ['project:write'], 'swagger_definition_name' => 'Write', ] )] class Project extends FormEntity implements UuidInterface { use UuidTrait; public const TABLE_NAME = 'projects'; #[Groups(['project:read'])] private ?int $id = null; #[Groups(['project:read', 'project:write'])] private ?string $description = null; #[Groups(['project:read', 'project:write'])] private ?string $name = null; /** * @var mixed[] */ #[Groups(['project:read', 'project:write'])] private array $properties = []; /** * Transient property to store the count of entities associated with this project. * This is not persisted to the database. */ public int $entitiesCount = 0; public function __clone() { $this->id = null; parent::__clone(); } public static function loadMetadata(OrmClassMetadata $metadata): void { $builder = new ClassMetadataBuilder($metadata); $builder->setTable(self::TABLE_NAME) ->setCustomRepositoryClass(ProjectRepository::class) ->addIndex(['name'], 'project_name'); $builder->addIdColumns(); $builder->addField('properties', Types::JSON); static::addUuidField($builder); } public static function loadApiMetadata(ApiMetadataDriver $metadata): void { $metadata->setGroupPrefix('project') ->addListProperties( [ 'id', 'name', ] ) ->addProperties( [ 'description', 'properties', ] ) ->build(); } public static function loadValidatorMetadata(ClassMetadata $metadata): void { $metadata->addPropertyConstraint( 'name', new NotBlank(['message' => 'mautic.core.name.required']) ); } public function getId(): ?int { return $this->id; } public function getDescription(): ?string { return $this->description; } public function setDescription(?string $description): void { $this->isChanged('description', $description); $this->description = $description; } public function getName(): ?string { return $this->name; } public function setName(?string $name): void { $this->isChanged('name', $name); $this->name = $name; } /** * @return mixed[] */ public function getProperties(): array { return $this->properties; } /** * @param mixed[] $properties */ public function setProperties(array $properties): void { $this->isChanged('properties', $properties); $this->properties = $properties; } }