src/Domain/Entity/DirectoryCountry.php line 51

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Domain\Entity;
  4. use ApiPlatform\Metadata\ApiResource;
  5. use ApiPlatform\Metadata\Delete;
  6. use ApiPlatform\Metadata\Get;
  7. use ApiPlatform\Metadata\GetCollection;
  8. use ApiPlatform\Metadata\Post;
  9. use ApiPlatform\Metadata\Put;
  10. use App\Application\ApiResources\State\Processor\Directory\DirectoryCountryUpdateProcessor;
  11. use App\Application\ApiResources\State\Provider\GetDirectoryCountryProvider;
  12. use App\Domain\Entity\Behavior\Identifiable;
  13. use App\Domain\Entity\Translation\DirectoryCountryTranslation;
  14. use DateTime;
  15. use Doctrine\Common\Collections\Collection;
  16. use Gedmo\SoftDeleteable\Traits\SoftDeleteable;
  17. use Gedmo\Timestampable\Traits\Timestampable;
  18. use Locastic\ApiPlatformTranslationBundle\Model\AbstractTranslatable;
  19. use Locastic\ApiPlatformTranslationBundle\Model\TranslationInterface;
  20. #[ApiResource(
  21.     operations: [
  22.         new Delete(security"is_granted('ROLE_ADMIN')"),
  23.         new GetCollection(filters: ['directory_country.search_filter''directory_country.query_filter']),
  24.         new Get(
  25.             requirements: [
  26.                 'uuid' => '^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$',
  27.             ],
  28.         ),
  29.         new Get(
  30.             uriTemplate'/directory_countries/slug',
  31.             name'get_country_by_slug',
  32.             providerGetDirectoryCountryProvider::class,
  33.         ),
  34.         new Post(
  35.             normalizationContext: ['groups' => ['translations']],
  36.             security"is_granted('ROLE_ADMIN')",
  37.         ),
  38.         new Put(
  39.             normalizationContext: ['groups' => ['translations']],
  40.             security"is_granted('ROLE_ADMIN')",
  41.         ),
  42.     ],
  43.     normalizationContext: ['groups' => ['directory_country_read']],
  44.     denormalizationContext: ['groups' => ['directory_country_write']],
  45.     filters: ['translation.groups']
  46. )]
  47. class DirectoryCountry extends AbstractTranslatable
  48. {
  49.     use Identifiable;
  50.     use SoftDeleteable;
  51.     use Timestampable;
  52.     /** @var Collection */
  53.     private Collection $departments;
  54.     public function __construct(
  55.         public Media $photo,
  56.         public Country $country,
  57.         public ?string $reference null,
  58.         public ?string $remoteId null,
  59.         public ?DateTime $zhistUpdate null,
  60.         public ?bool $favorite false,
  61.     ) {
  62.         parent::__construct();
  63.     }
  64.     public function createTranslation(): TranslationInterface
  65.     {
  66.         return new DirectoryCountryTranslation();
  67.     }
  68.     public function getTranslationType(?string $locale null): DirectoryCountryTranslation
  69.     {
  70.         return $this->getTranslation($locale);
  71.     }
  72.     public function getDescription(?string $locale null): ?string
  73.     {
  74.         return $this->getTranslationType($locale)->getDescription();
  75.     }
  76.     public function setDescription(?string $description, ?string $locale null): void
  77.     {
  78.         $this->getTranslationType($locale)->setDescription($description);
  79.     }
  80.     public function getName(?string $locale null): ?string
  81.     {
  82.         return $this->getTranslationType($locale)->getName();
  83.     }
  84.     public function setName(?string $name, ?string $locale null): void
  85.     {
  86.         $this->getTranslationType($locale)->setName($name);
  87.     }
  88.     public function getTitle(?string $locale null): ?string
  89.     {
  90.         return $this->getTranslationType($locale)->getTitle();
  91.     }
  92.     public function setTitle(?string $title, ?string $locale null): void
  93.     {
  94.         $this->getTranslationType($locale)->setTitle($title);
  95.     }
  96. }