src/Entity/Admin.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use ApiPlatform\Core\Annotation\ApiFilter;
  4. use ApiPlatform\Core\Annotation\ApiResource;
  5. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
  6. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
  7. use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use Gedmo\Timestampable\Traits\TimestampableEntity;
  10. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  11. use Symfony\Component\Serializer\Annotation\Groups;
  12. /**
  13.  * @ORM\Entity(repositoryClass="App\Repository\AdminRepository")
  14.  * @ORM\HasLifecycleCallbacks()
  15.  * @UniqueEntity(fields={"user","company"},errorPath="user",message="This user is already in use on that company.")
  16.  */
  17. #[ApiResource(
  18.     attributes: ['security' => "is_granted('ROLE_USER')"],
  19.     normalizationContext: ['groups' => ['admin:read']],
  20.     denormalizationContext: ['groups' => ['admin:write']],
  21.     collectionOperations: ['get''post' => ['security' => "is_granted('ROLE_ADMIN')"]],
  22.     itemOperations: ['get''put' => ['security' => "is_granted('ROLE_ADMIN') or object.owner == user"], 'delete'],
  23. )]
  24. #[ApiFilter(SearchFilter::class, properties: ['user' => 'exact''company' => 'exact'])]
  25. #[ApiFilter(PropertyFilter::class)]
  26. #[ApiFilter(OrderFilter::class, properties: ['id''user.email''company.name''createdAt'], arguments: ['orderParameterName' => 'order'])]
  27. class Admin
  28. {
  29.     use TimestampableEntity;
  30.     /**
  31.      * @ORM\Id()
  32.      * @ORM\GeneratedValue()
  33.      * @ORM\Column(type="integer")
  34.      */
  35.     private $id;
  36.     /**
  37.      * @ORM\ManyToOne(targetEntity="App\Entity\User")
  38.      * @ORM\JoinColumn(nullable=false, name="user_id", referencedColumnName="id", onDelete="CASCADE")
  39.      * @Groups({"admin:read", "admin:write"})
  40.      */
  41.     private $user;
  42.     /**
  43.      * @ORM\ManyToOne(targetEntity="App\Entity\Company", inversedBy="admins")
  44.      * @ORM\JoinColumn(nullable=false, name="company_id", referencedColumnName="id",  onDelete="CASCADE")
  45.      * @Groups({"admin:read", "admin:write"})
  46.      */
  47.     private $company;
  48.     /**
  49.      * @return string
  50.      */
  51.     public function __toString()
  52.     {
  53.         return $this->getUser()->getFirstName() . ' ' $this->getUser()->getLastName() . ' (' $this->getUser()->getEmail() . ')';
  54.     }
  55.     public function getId(): ?int
  56.     {
  57.         return $this->id;
  58.     }
  59.     public function getUser(): ?User
  60.     {
  61.         return $this->user;
  62.     }
  63.     public function setUser(?User $user): self
  64.     {
  65.         $this->user $user;
  66.         return $this;
  67.     }
  68.     public function getCompany(): ?Company
  69.     {
  70.         return $this->company;
  71.     }
  72.     public function setCompany(?Company $company): self
  73.     {
  74.         $this->company $company;
  75.         return $this;
  76.     }
  77.     /**
  78.      * @Groups({"admin:read"})
  79.      * Returns createdAt.
  80.      */
  81.     public function getCreatedAt(): ?\DateTimeInterface
  82.     {
  83.         return $this->createdAt;
  84.     }
  85. }