src/Entity/User.php line 25

  1. <?php
  2. namespace App\Entity;
  3. use ApiPlatform\Core\Annotation\ApiFilter;
  4. use ApiPlatform\Core\Annotation\ApiResource;
  5. use App\Repository\UserRepository;
  6. use Doctrine\Common\Collections\ArrayCollection;
  7. use Doctrine\Common\Collections\Collection;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  10. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  11. use Symfony\Component\Security\Core\User\UserInterface;
  12. use Symfony\Component\Serializer\Annotation\Groups;
  13. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
  14. #[ApiResource(
  15.     normalizationContext: ['groups' => ['read']],
  16.     denormalizationContext: ['groups' => ['write']],
  17. )]
  18. #[ApiFilter(SearchFilter::class, properties: ['username' => 'exact','googleId' => 'exact'])]
  19. #[ORM\Table(name'user')]
  20. #[ORM\Entity(repositoryClassUserRepository::class)]
  21. #[UniqueEntity(fields: ['username'], message'There is already an account with this username')]
  22. class User implements UserInterfacePasswordAuthenticatedUserInterface
  23. {
  24.     #[ORM\Id]
  25.     #[ORM\GeneratedValue]
  26.     #[ORM\Column(type'integer')]
  27.     private $id;
  28.     #[Groups(["read","write"])]
  29.     #[ORM\Column(type'string'length180uniquetrue)]
  30.     private ?string $username null;
  31.     #[Groups(["read","write"])]
  32.     #[ORM\Column(type'json')]
  33.     private array $roles = [];
  34.     #[Groups(["read","write"])]
  35.     #[ORM\Column(type'string')]
  36.     private ?string $password "";
  37.     
  38.     #[ORM\Column(type'boolean'nullabletrue)]
  39.     #[Groups(["read","write"])]
  40.     private ?bool $isValid null;
  41.     #[ORM\Column(type'boolean')]
  42.     #[Groups(["read","write"])]
  43.     private bool $isVerified false;
  44.     #[ORM\ManyToMany(targetEntityRole::class, inversedBy'users')]
  45.     private Collection $storedRoles;
  46.     
  47.     #[Groups(["read","write"])]
  48.     #[ORM\Column(length255nullabletrue)]
  49.     private ?string $exponentPushToken null;
  50.     #[Groups(["read","write"])]
  51.     #[ORM\Column(length255nullabletrue)]
  52.     private ?string $googleId null;
  53.     #[Groups(["read","write"])]
  54.     #[ORM\Column(length255nullabletrue)]
  55.     private ?string $avatar null;
  56.     #[Groups(["read","write"])]
  57.     #[ORM\Column(length255nullabletrue)]
  58.     private ?string $facebookId null;
  59.     #[ORM\OneToMany(mappedBy'user'targetEntityAiRequest::class)]
  60.     private Collection $aiRequests;
  61.     public function __construct()
  62.     {
  63.         $this->storedRoles = new ArrayCollection();
  64.         $this->isValid true;
  65.         $this->aiRequests = new ArrayCollection();
  66.     }
  67.     public function __toString()
  68.     {
  69.         return $this->getUserIdentifier();
  70.     }
  71.     public function getId(): ?int
  72.     {
  73.         return $this->id;
  74.     }
  75.     /**
  76.      * @deprecated since Symfony 5.3, use getUserIdentifier instead
  77.      */
  78.     public function getUsername(): string
  79.     {
  80.         return (string) $this->username;
  81.     }
  82.     public function setUsername(string $username): self
  83.     {
  84.         $this->username $username;
  85.         return $this;
  86.     }
  87.     /**
  88.      * A visual identifier that represents this user.
  89.      *
  90.      * @see UserInterface
  91.      */
  92.     public function getUserIdentifier(): string
  93.     {
  94.         return (string) $this->username;
  95.     }
  96.     /**
  97.      * @see UserInterface
  98.      */
  99.     public function getRoles(): array
  100.     {
  101.         $roles $this->roles;
  102.         // guarantee every user at least has ROLE_USER
  103.         $roles[] = 'ROLE_USER';
  104.         foreach($this->getStoredRoles() as $singleRole){
  105.             $roles[] = $singleRole->getName();
  106.         }
  107.         return array_unique($roles);
  108.     }
  109.     public function setRoles(array $roles): self
  110.     {
  111.         $this->roles $roles;
  112.         return $this;
  113.     }
  114.     /**
  115.      * @see PasswordAuthenticatedUserInterface
  116.      */
  117.     public function getPassword(): string
  118.     {
  119.         return $this->password;
  120.     }
  121.     public function setPassword(string $password): self
  122.     {
  123.         $this->password $password;
  124.         return $this;
  125.     }
  126.     /**
  127.      * Returning a salt is only needed, if you are not using a modern
  128.      * hashing algorithm (e.g. bcrypt or sodium) in your security.yaml.
  129.      *
  130.      * @see UserInterface
  131.      */
  132.     public function getSalt(): ?string
  133.     {
  134.         return null;
  135.     }
  136.     /**
  137.      * @see UserInterface
  138.      */
  139.     public function eraseCredentials()
  140.     {
  141.         // If you store any temporary, sensitive data on the user, clear it here
  142.         // $this->plainPassword = null;
  143.     }
  144.     public function getIsValid(): ?bool
  145.     {
  146.         return $this->isValid;
  147.     }
  148.     public function setIsValid(?bool $isValid): self
  149.     {
  150.         $this->isValid $isValid;
  151.         return $this;
  152.     }
  153.     public function isVerified(): bool
  154.     {
  155.         return $this->isVerified;
  156.     }
  157.     public function setIsVerified(bool $isVerified): self
  158.     {
  159.         $this->isVerified $isVerified;
  160.         return $this;
  161.     }
  162.     /**
  163.      * @return Collection<int, Role>
  164.      */
  165.     public function getStoredRoles(): Collection
  166.     {
  167.         return $this->storedRoles;
  168.     }
  169.     public function addStoredRole(Role $storedRole): self
  170.     {
  171.         if (!$this->storedRoles->contains($storedRole)) {
  172.             $this->storedRoles->add($storedRole);
  173.             $storedRole->addUser($this);
  174.         }
  175.         return $this;
  176.     }
  177.     public function removeStoredRole(Role $storedRole): self
  178.     {
  179.         if ($this->storedRoles->removeElement($storedRole)) {
  180.             $storedRole->removeUser($this);
  181.         }
  182.         return $this;
  183.     }
  184.     public function getExponentPushToken(): ?string
  185.     {
  186.         return $this->exponentPushToken;
  187.     }
  188.     public function setExponentPushToken(?string $exponentPushToken): self
  189.     {
  190.         $this->exponentPushToken $exponentPushToken;
  191.         return $this;
  192.     }
  193.     public function getGoogleId(): ?string
  194.     {
  195.         return $this->googleId;
  196.     }
  197.     public function setGoogleId(?string $googleId): self
  198.     {
  199.         $this->googleId $googleId;
  200.         return $this;
  201.     }
  202.     public function getAvatar(): ?string
  203.     {
  204.         return $this->avatar;
  205.     }
  206.     public function setAvatar(?string $avatar): self
  207.     {
  208.         $this->avatar $avatar;
  209.         return $this;
  210.     }
  211.     public function getFacebookId(): ?string
  212.     {
  213.         return $this->facebookId;
  214.     }
  215.     public function setFacebookId(?string $facebookId): self
  216.     {
  217.         $this->facebookId $facebookId;
  218.         return $this;
  219.     }
  220.     /**
  221.      * @return Collection<int, AiRequest>
  222.      */
  223.     public function getAiRequests(): Collection
  224.     {
  225.         return $this->aiRequests;
  226.     }
  227.     public function addAiRequest(AiRequest $aiRequest): static
  228.     {
  229.         if (!$this->aiRequests->contains($aiRequest)) {
  230.             $this->aiRequests->add($aiRequest);
  231.             $aiRequest->setUser($this);
  232.         }
  233.         return $this;
  234.     }
  235.     public function removeAiRequest(AiRequest $aiRequest): static
  236.     {
  237.         if ($this->aiRequests->removeElement($aiRequest)) {
  238.             // set the owning side to null (unless already changed)
  239.             if ($aiRequest->getUser() === $this) {
  240.                 $aiRequest->setUser(null);
  241.             }
  242.         }
  243.         return $this;
  244.     }
  245. }