src/Entity/CartCountry.php line 50
<?php
namespace App\Entity;
use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Metadata\ApiFilter;
use ApiPlatform\Metadata\ApiProperty;
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\Entity\Trait\IdTrait;
use App\Entity\Trait\StatTrait;
use App\Entity\Trait\TimestampableTrait;
use App\Entity\Trait\UuidTrait;
use App\Enum\Country;
use App\Repository\CartCountryRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Serializer\Annotation\Groups;
#[ApiResource(
description: 'Cart countries',
operations: [
new GetCollection(),
new Post(
denormalizationContext: ['groups' => ['write', 'post']],
),
new Get(),
new Put(),
new Delete(),
],
normalizationContext: ['groups' => [
'read',
'read:' . self::class,
]],
denormalizationContext: ['groups' => ['write']],
order: ['createdAt' => 'desc'],
security: 'is_granted("' . self::class . '")',
extraProperties: ['standard_put' => false],
)]
#[UniqueEntity(fields: ['country'])]
#[ApiFilter(OrderFilter::class, properties: ['createdAt', 'region.workingTitle'])]
#[ORM\Entity(repositoryClass: CartCountryRepository::class)]
class CartCountry
{
use IdTrait;
use UuidTrait;
use TimestampableTrait;
use StatTrait;
#[ApiProperty(description: 'Country', writableLink: false)]
#[Groups(['read:' . self::class, 'write'])]
#[ORM\Column(
type: Types::STRING,
length: 255,
enumType: Country::class,
)]
private ?Country $country = null;
#[ApiProperty(description: 'Countries', writableLink: false)]
#[Groups(['read:' . self::class, 'write'])]
#[ORM\ManyToOne(inversedBy: 'countries')]
private ?CartRegion $region = null;
#[ORM\OneToMany(mappedBy: 'country', targetEntity: Cart::class)]
private Collection $carts;
public function __construct()
{
$this->setUuid();
$this->createdAt = new \DateTimeImmutable();
$this->updatedAt = new \DateTimeImmutable();
$this->carts = new ArrayCollection();
}
public function getCountry(): ?Country
{
return $this->country;
}
public function setCountry(?Country $country): self
{
$this->country = $country;
return $this;
}
public function getRegion(): ?CartRegion
{
return $this->region;
}
public function setRegion(?CartRegion $region): static
{
$this->region = $region;
return $this;
}
/**
* @return Collection<int, Cart>
*/
public function getCarts(): Collection
{
return $this->carts;
}
public function addCart(Cart $cart): static
{
if (!$this->carts->contains($cart)) {
$this->carts->add($cart);
$cart->setCountry($this);
}
return $this;
}
public function removeCart(Cart $cart): static
{
if ($this->carts->removeElement($cart)) {
// set the owning side to null (unless already changed)
if ($cart->getCountry() === $this) {
$cart->setCountry(null);
}
}
return $this;
}
}