src/Domain/Entity/TripCategory.php line 41

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\Controller\Api\TripCategory\GetBySlugOrUuidAction;
  11. use App\Application\Service\SluggerService;
  12. use App\Domain\Entity\Behavior\Identifiable;
  13. use App\Domain\Entity\Translation\TripCategoryTranslation;
  14. use DateTime;
  15. use Doctrine\Common\Collections\ArrayCollection;
  16. use Doctrine\Common\Collections\Collection;
  17. use Gedmo\SoftDeleteable\Traits\SoftDeleteable;
  18. use Gedmo\Timestampable\Traits\Timestampable;
  19. use Locastic\ApiPlatformTranslationBundle\Model\AbstractTranslatable;
  20. use Locastic\ApiPlatformTranslationBundle\Model\TranslationInterface;
  21. #[ApiResource(
  22.     operations            : [
  23.         new Delete(security"is_granted('ROLE_ADMIN')"),
  24.         new GetCollection(filters: ['trip_category.search_filter''trip_category.query_filter''soft_delete_filter']),
  25.         new Get(
  26.             uriTemplate'trip_categories/{uuid}',
  27.             controller GetBySlugOrUuidAction::class,
  28.             read       false,
  29.         ),
  30.         new Post(normalizationContext: ['groups' => ['translations']], security"is_granted('ROLE_ADMIN')"),
  31.         new Put(normalizationContext: ['groups' => ['translations']], security"is_granted('ROLE_ADMIN')"),
  32.     ],
  33.     normalizationContext  : ['groups' => ['trip_category_read']],
  34.     denormalizationContext: ['groups' => ['trip_category_write']],
  35.     filters               : ['translation.groups']
  36. )]
  37. class TripCategory extends AbstractTranslatable
  38. {
  39.     use Identifiable;
  40.     use SoftDeleteable;
  41.     use Timestampable;
  42.     public Collection $trips;
  43.     public ?DateTime $zhistUpdate null;
  44.     public function __construct(
  45.         public Media $photo,
  46.         public Media $logo,
  47.         public ?string $remoteId null,
  48.         // For Input Dto only, not doctrine mapped
  49.         public int $tripsCount 0,
  50.     ) {
  51.         parent::__construct();
  52.         $this->trips = new ArrayCollection();
  53.     }
  54.     public function getTranslationType(): TripCategoryTranslation
  55.     {
  56.         return $this->getTranslation();
  57.     }
  58.     public function getName(): ?string
  59.     {
  60.         return $this->getTranslationType()->getName();
  61.     }
  62.     public function setName(?string $name): void
  63.     {
  64.         $this->getTranslationType()->setName($name);
  65.     }
  66.     public function createTranslation(): TranslationInterface
  67.     {
  68.         return new TripCategoryTranslation();
  69.     }
  70.     public function getSlug(): string
  71.     {
  72.         return SluggerService::formatSlug($this->getName());
  73.     }
  74. }