<?php
namespace App\Domain\Entity;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Delete;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Put;
use App\Application\Controller\Api\Metadata\SeoAction;
use App\Application\Controller\Api\Metadata\SyncAction;
use App\Domain\Entity\Behavior\Identifiable;
use Gedmo\Timestampable\Traits\Timestampable;
/**
* Class Metadata
*
* @package App\Domain\Entity
*/
#[ApiResource(
operations : [
new Delete(security: "is_granted('ROLE_ADMIN')"),
new GetCollection(
uriTemplate: '/metadata/sync',
controller : SyncAction::class,
security : "is_granted('ROLE_ADMIN')",
deserialize: false,
validate : false,
serialize : false,
name : 'sync'
),
new GetCollection(
uriTemplate: '/metadata',
filters : ['metadata.search_filter'],
),
new Get(
uriTemplate: '/metadata/seo',
controller : SeoAction::class,
read : false,
deserialize: false,
),
new Get(),
new Put(security: "is_granted('ROLE_ADMIN')"),
],
normalizationContext : ['groups' => ['metadata_read']],
denormalizationContext: ['groups' => ['metadata_write']],
)]
class Metadata
{
use Identifiable;
use Timestampable;
/**
* @param Locale $locale
* @param string $url
* @param string $name
* @param string|null $title
* @param string|null $description
* @param string|null $keywords
*/
public function __construct(
public Locale $locale,
public string $url,
public string $name,
public ?string $title = null,
public ?string $description = null,
public ?string $keywords = null,
) {}
}