<?php
declare(strict_types=1);
namespace App\Domain\Entity;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Delete;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Post;
use ApiPlatform\Metadata\Put;
use App\Domain\Entity\Behavior\Identifiable;
use App\Domain\Entity\Translation\DestinationTranslation;
use Gedmo\SoftDeleteable\Traits\SoftDeleteable;
use Gedmo\Timestampable\Traits\Timestampable;
use Locastic\ApiPlatformTranslationBundle\Model\AbstractTranslatable;
use Locastic\ApiPlatformTranslationBundle\Model\TranslationInterface;
#[ApiResource(
operations : [
new Delete(security: "is_granted('ROLE_ADMIN')"),
new GetCollection(filters: ['destination.search_filter', 'destination.query_filter', 'soft_delete_filter']),
new Get(),
new Post(normalizationContext: ['groups' => ['translations']], security: "is_granted('ROLE_ADMIN')"),
new Put(normalizationContext: ['groups' => ['translations']], security: "is_granted('ROLE_ADMIN')"),
],
normalizationContext : ['groups' => ['destination_read']],
denormalizationContext: ['groups' => ['destination_write']],
filters : ['translation.groups'],
)]
class Destination extends AbstractTranslatable
{
use Identifiable;
use SoftDeleteable;
use Timestampable;
public function __construct(
public ?bool $status = null,
public ?string $mapUrl = null,
public ?string $cityName = null,
public ?Media $photo = null,
public ?Country $country = null,
) {
parent::__construct();
}
public function createTranslation(): TranslationInterface
{
return new DestinationTranslation();
}
public function getCityName(): ?string
{
return $this->getTranslationType()->getCityName();
}
public function getTranslationType(): DestinationTranslation
{
return $this->getTranslation();
}
public function setCityName(?string $cityName): void
{
$this->getTranslationType()->setCityName($cityName);
}
}