src/Entity/CartCountry.php line 50

  1. <?php
  2. namespace App\Entity;
  3. use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
  4. use ApiPlatform\Metadata\ApiFilter;
  5. use ApiPlatform\Metadata\ApiProperty;
  6. use ApiPlatform\Metadata\ApiResource;
  7. use ApiPlatform\Metadata\Delete;
  8. use ApiPlatform\Metadata\Get;
  9. use ApiPlatform\Metadata\GetCollection;
  10. use ApiPlatform\Metadata\Post;
  11. use ApiPlatform\Metadata\Put;
  12. use App\Entity\Trait\IdTrait;
  13. use App\Entity\Trait\StatTrait;
  14. use App\Entity\Trait\TimestampableTrait;
  15. use App\Entity\Trait\UuidTrait;
  16. use App\Enum\Country;
  17. use App\Repository\CartCountryRepository;
  18. use Doctrine\Common\Collections\ArrayCollection;
  19. use Doctrine\Common\Collections\Collection;
  20. use Doctrine\DBAL\Types\Types;
  21. use Doctrine\ORM\Mapping as ORM;
  22. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  23. use Symfony\Component\Serializer\Annotation\Groups;
  24. #[ApiResource(
  25.     description'Cart countries',
  26.     operations: [
  27.         new GetCollection(),
  28.         new Post(
  29.             denormalizationContext: ['groups' => ['write''post']],
  30.         ),
  31.         new Get(),
  32.         new Put(),
  33.         new Delete(),
  34.     ],
  35.     normalizationContext: ['groups' => [
  36.         'read',
  37.         'read:' self::class,
  38.     ]],
  39.     denormalizationContext: ['groups' => ['write']],
  40.     order: ['createdAt' => 'desc'],
  41.     security'is_granted("' self::class . '")',
  42.     extraProperties: ['standard_put' => false],
  43. )]
  44. #[UniqueEntity(fields: ['country'])]
  45. #[ApiFilter(OrderFilter::class, properties: ['createdAt''region.workingTitle'])]
  46. #[ORM\Entity(repositoryClassCartCountryRepository::class)]
  47. class CartCountry
  48. {
  49.     use IdTrait;
  50.     use UuidTrait;
  51.     use TimestampableTrait;
  52.     use StatTrait;
  53.     #[ApiProperty(description'Country'writableLinkfalse)]
  54.     #[Groups(['read:' self::class, 'write'])]
  55.     #[ORM\Column(
  56.         typeTypes::STRING,
  57.         length255,
  58.         enumTypeCountry::class,
  59.     )]
  60.     private ?Country $country null;
  61.     #[ApiProperty(description'Countries'writableLinkfalse)]
  62.     #[Groups(['read:' self::class, 'write'])]
  63.     #[ORM\ManyToOne(inversedBy'countries')]
  64.     private ?CartRegion $region null;
  65.     #[ORM\OneToMany(mappedBy'country'targetEntityCart::class)]
  66.     private Collection $carts;
  67.     public function __construct()
  68.     {
  69.         $this->setUuid();
  70.         $this->createdAt = new \DateTimeImmutable();
  71.         $this->updatedAt = new \DateTimeImmutable();
  72.         $this->carts = new ArrayCollection();
  73.     }
  74.     public function getCountry(): ?Country
  75.     {
  76.         return $this->country;
  77.     }
  78.     public function setCountry(?Country $country): self
  79.     {
  80.         $this->country $country;
  81.         return $this;
  82.     }
  83.     public function getRegion(): ?CartRegion
  84.     {
  85.         return $this->region;
  86.     }
  87.     public function setRegion(?CartRegion $region): static
  88.     {
  89.         $this->region $region;
  90.         return $this;
  91.     }
  92.     /**
  93.      * @return Collection<int, Cart>
  94.      */
  95.     public function getCarts(): Collection
  96.     {
  97.         return $this->carts;
  98.     }
  99.     public function addCart(Cart $cart): static
  100.     {
  101.         if (!$this->carts->contains($cart)) {
  102.             $this->carts->add($cart);
  103.             $cart->setCountry($this);
  104.         }
  105.         return $this;
  106.     }
  107.     public function removeCart(Cart $cart): static
  108.     {
  109.         if ($this->carts->removeElement($cart)) {
  110.             // set the owning side to null (unless already changed)
  111.             if ($cart->getCountry() === $this) {
  112.                 $cart->setCountry(null);
  113.             }
  114.         }
  115.         return $this;
  116.     }
  117. }