src/Entity/User.php line 43

  1. <?php
  2. namespace App\Entity;
  3. use App\Repository\UserRepository;
  4. use DateTime;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7. use Doctrine\DBAL\Types\Types;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  10. use Symfony\Component\Security\Core\User\UserInterface;
  11. use App\Model\Constant\UserRole;
  12. use Symfony\Component\Serializer\Annotation\Groups;
  13. use Symfony\Component\Validator\Constraints as Assert;
  14. use App\Security\Model\BelongUser;
  15. use ApiPlatform\Metadata\ApiResource;
  16. use ApiPlatform\Metadata\GetCollection;
  17. use ApiPlatform\Metadata\Get;
  18. use ApiPlatform\Metadata\Put;
  19. use App\Controller\Api\User\UserController;
  20. use App\Validator\Constraints as AssertApp;
  21. use App\Entity\MediaObject;
  22. use Vich\UploaderBundle\Mapping\Annotation as Vich;
  23. #[ORM\Entity(repositoryClassUserRepository::class)]
  24. #[ORM\Table(name'`user`')]
  25. #[Vich\Uploadable]
  26. #[ApiResource(
  27.     operations: [
  28.         new GetCollection(),
  29.         new Get(
  30.             normalizationContext: ['groups' => ['user_get''user_getc''user_get_me']]
  31.         ),
  32.         new Put(
  33.             routeName'app_api_users',
  34.             controllerUserController::class,
  35.             normalizationContext: ['groups' => ['user_put''app_api_users']],
  36.             denormalizationContext: ['groups' => ['user_put']]
  37.         )
  38.     ]
  39. )]
  40. class User implements UserInterfacePasswordAuthenticatedUserInterfaceBelongUser
  41. {
  42.     final public const ROLE_USER 'ROLE_USER';
  43.     final public const ROLE_ADMIN 'ROLE_ADMIN';
  44.     #[ORM\Id]
  45.     #[ORM\GeneratedValue]
  46.     #[ORM\Column]
  47.     #[Groups([
  48.         'user_get''user_getc',
  49.         'user_get_me',
  50.         'token_get_login',
  51.     ])]
  52.     private ?int $id null;
  53.     #[ORM\Column(length180uniquetrue)]
  54.     #[Groups([
  55.         'user_get''user_getc''user_post',
  56.         'user_get_me''user_put',
  57.         'token_get_login',
  58.     ])]
  59.     #[Assert\Length(max255groups: ['user_post'])]
  60.     #[Assert\NotBlank(groups: ['user_post'])]
  61.     #[Assert\Email(groups: ['user_post'])]
  62.     private ?string $email null;
  63.     // #[ORM\Column(type: 'array_pipe')]
  64.     #[Groups([
  65.         'user_get''user_getc',
  66.         'user_get_me',
  67.         'token_get_login'
  68.     ])]
  69.     #[Assert\Choice(callback: [UserRole::class, "getValues"], multipletrue)]
  70.     #[ORM\Column(typeTypes::JSON)]
  71.     private array $roles = [];
  72.     /**
  73.      * @var string The hashed password
  74.      */
  75.     #[ORM\Column]
  76.     #[Groups([
  77.         'user_patch_password''user_patch_resetPasswordConfirm''user_post'
  78.     ])]
  79.     #[Assert\NotBlank(groups: ['user_patch_password''user_patch_resetPasswordConfirm'])]
  80.     private ?string $password null;
  81.     #[ORM\Column(length255)]
  82.     #[Groups([
  83.         'user_get''user_getc''user_post''user_put',
  84.         'user_get_me',
  85.         'token_get_login'
  86.     ])]
  87.     #[Assert\Length(max45groups: ['user_post''user_put'])]
  88.     #[Assert\NotBlank(groups: ['user_post''user_put'])]
  89.     private ?string $fullName null;
  90.     #[ORM\Column(length45nullabletrue)]
  91.     #[Groups([
  92.         'user_get''user_getc''user_post''user_put',
  93.         'user_get_me',
  94.         'token_get_login'
  95.     ])]
  96.     private ?string $phone null;
  97.     #[ORM\Column(typeTypes::DATETIME_MUTABLEnullabletrue)]
  98.     #[Groups([
  99.         'user_get''user_getc''user_post''user_put',
  100.         'user_get_me',
  101.         'token_get_login'
  102.     ])]
  103.     #[Assert\NotBlank(groups: ['user_post''user_put'])]
  104.     private ?\DateTime $dateOfBirth null;
  105.     #[ORM\Column(length2000nullabletrue)]
  106.     #[Groups([
  107.         'user_get''user_getc''user_post',
  108.         'user_get_me'
  109.     ])]
  110.     #[Assert\NotBlank(groups: ['user_post'])]
  111.     private ?string $walletNumber null;
  112.     #[ORM\Column(typeTypes::DATETIME_MUTABLE)]
  113.     private ?\DateTime $createdAt null;
  114.     #[ORM\OneToMany(mappedBy'user'targetEntityOrder::class)]
  115.     #[Groups([
  116.         'user_get''user_getc',
  117.         'user_get_me''token_get_login'
  118.     ])]
  119.     private Collection $orders;
  120.     #[ORM\Column(length255nullabletrue)]
  121.     #[Groups([
  122.         'user_get''user_getc''user_post',
  123.         'user_get_me''user_put''token_get_login'
  124.     ])]
  125.     private ?string $adresse null;
  126.     #[Groups([
  127.         'user_get_me',
  128.     ])]
  129.     private ?Token $currentToken;
  130.     /**
  131.      * @var ArrayCollection<Token>
  132.      */
  133.     #[ORM\OneToMany(targetEntityToken::class, mappedBy'user'cascade: ['remove'])]
  134.     private Collection $tokens;
  135.     /**
  136.      * @var ArrayCollection<Token>
  137.      */
  138.     #[ORM\OneToMany(targetEntityRefreshToken::class, mappedBy'user'cascade: ['remove'])]
  139.     private Collection $refreshTokens;
  140.     // #[ORM\Column(length: 10, type: 'gender_enum')]
  141.     #[ORM\Column(length10nullabletrue)]
  142.     #[Groups([
  143.         'user_get''user_getc''user_put',
  144.         'user_get_me''token_get_login'
  145.     ])]
  146.     private ?string $gender null;
  147.     #[Groups([
  148.         'user_get''user_getc''user_get_me''token_get_login'
  149.     ])]
  150.     #[ORM\OneToMany(mappedBy'user'targetEntityCard::class)]
  151.     private Collection $cards;
  152.     #[ORM\Column(length255nullabletrue)]
  153.     #[Groups([
  154.         'user_get''user_getc''user_put',
  155.         'user_get_me''token_get_login'
  156.     ])]
  157.     private ?string $country null;
  158.     #[ORM\Column(length255nullabletrue)]
  159.     #[Groups([
  160.         'user_get''user_getc''user_post''user_put''token_get_login'
  161.     ])]
  162.     private ?string $nationality null;
  163.     #[Groups([
  164.         'user_get''user_getc''user_post''user_put',
  165.         'user_get_me',
  166.         'token_get_login'
  167.     ])]
  168.     #[ORM\OneToMany(mappedBy'user'targetEntityMediaObject::class)]
  169.     private Collection $file;
  170.     #[ORM\Column]
  171.     #[Groups([
  172.         'user_get''user_getc''user_post''user_put''token_get_login'
  173.     ])]
  174.     private ?bool $isExist false;
  175.     #[Groups([
  176.         'user_get''user_getc''user_post''user_put',
  177.         'user_get_me',
  178.         'token_get_login'
  179.     ])]
  180.     #[ORM\Column(length255nullabletrue)]
  181.     private ?string $signatureImage null;
  182.     
  183.     #[ORM\Column(length255nullabletrue)]
  184.     #[Groups([
  185.         'user_get''user_getc''user_put',
  186.         'user_get_me''token_get_login'
  187.     ])]
  188.     private ?string $city null;
  189.     #[ORM\OneToOne(inversedBy'user'cascade: ['persist''remove'])]
  190.     #[Groups([
  191.         'user_get''user_getc''user_put',
  192.         'user_get_me''token_get_login'
  193.     ])]
  194.     private ?Company $company null;
  195.     public function __construct()
  196.     {
  197.         $this->createdAt = new DateTime();
  198.         $this->orders = new ArrayCollection();
  199.         $this->tokens = new ArrayCollection();
  200.         $this->refreshTokens = new ArrayCollection();
  201.         $this->setRoles([UserRole::ROLE_USER]);
  202.         $this->cards = new ArrayCollection();
  203.         $this->file = new ArrayCollection();
  204.     }
  205.     public function getId(): ?int
  206.     {
  207.         return $this->id;
  208.     }
  209.     public function getEmail(): ?string
  210.     {
  211.         return $this->email;
  212.     }
  213.     public function setEmail(string $email): static
  214.     {
  215.         $this->email $email;
  216.         return $this;
  217.     }
  218.     /**
  219.      * A visual identifier that represents this user.
  220.      *
  221.      * @see UserInterface
  222.      */
  223.     public function getUserIdentifier(): string
  224.     {
  225.         return (string) $this->email;
  226.     }
  227.     /**
  228.      * @see UserInterface
  229.      */
  230.     public function getRoles(): array
  231.     {
  232.         $roles $this->roles;
  233.         // guarantee every user at least has ROLE_USER
  234.         $roles[] = self::ROLE_USER;
  235.         return array_unique($roles);
  236.     }
  237.     public function setRoles(array $roles): static
  238.     {
  239.         $this->roles $roles;
  240.         return $this;
  241.     }
  242.     /**
  243.      * @see PasswordAuthenticatedUserInterface
  244.      */
  245.     public function getPassword(): string
  246.     {
  247.         return $this->password;
  248.     }
  249.     public function setPassword(string $password): static
  250.     {
  251.         $this->password $password;
  252.         return $this;
  253.     }
  254.     /**
  255.      * @see UserInterface
  256.      */
  257.     public function eraseCredentials(): void
  258.     {
  259.         // If you store any temporary, sensitive data on the user, clear it here
  260.         // $this->plainPassword = null;
  261.     }
  262.     public function getFullName(): ?string
  263.     {
  264.         return $this->fullName;
  265.     }
  266.     public function setFullName(string $fullName): static
  267.     {
  268.         $this->fullName $fullName;
  269.         return $this;
  270.     }
  271.     public function getPhone(): ?string
  272.     {
  273.         return $this->phone;
  274.     }
  275.     public function setPhone(?string $phone): static
  276.     {
  277.         $this->phone $phone;
  278.         return $this;
  279.     }
  280.     public function getDateOfBirth(): ?\DateTime
  281.     {
  282.         return $this->dateOfBirth;
  283.     }
  284.     public function setDateOfBirth(?\DateTime $dateOfBirth): static
  285.     {
  286.         $this->dateOfBirth $dateOfBirth;
  287.         return $this;
  288.     }
  289.     public function getWalletNumber(): ?string
  290.     {
  291.         return $this->walletNumber;
  292.     }
  293.     public function setWalletNumber(?string $walletNumber): static
  294.     {
  295.         $this->walletNumber $walletNumber;
  296.         return $this;
  297.     }
  298.     public function getCreatedAt(): ?\DateTime
  299.     {
  300.         return $this->createdAt;
  301.     }
  302.     public function setCreatedAt(\DateTime $createdAt): static
  303.     {
  304.         $this->createdAt $createdAt;
  305.         return $this;
  306.     }
  307.     /**
  308.      * @return Collection<int, Order>
  309.      */
  310.     public function getOrders(): Collection
  311.     {
  312.         return $this->orders;
  313.     }
  314.     public function addOrder(Order $order): static
  315.     {
  316.         if (!$this->orders->contains($order)) {
  317.             $this->orders->add($order);
  318.             $order->setUser($this);
  319.         }
  320.         return $this;
  321.     }
  322.     public function removeOrder(Order $order): static
  323.     {
  324.         if ($this->orders->removeElement($order)) {
  325.             // set the owning side to null (unless already changed)
  326.             if ($order->getUser() === $this) {
  327.                 $order->setUser(null);
  328.             }
  329.         }
  330.         return $this;
  331.     }
  332.     public function getAdresse(): ?string
  333.     {
  334.         return $this->adresse;
  335.     }
  336.     public function setAdresse(?string $adresse): static
  337.     {
  338.         $this->adresse $adresse;
  339.         return $this;
  340.     }
  341.     public function getGender(): ?string
  342.     {
  343.         return $this->gender;
  344.     }
  345.     public function setGender(string $gender): static
  346.     {
  347.         $this->gender $gender;
  348.         return $this;
  349.     }
  350.     /**
  351.      * @return Collection<Token>
  352.      */
  353.     public function getTokens()
  354.     {
  355.         return $this->tokens;
  356.     }
  357.     /**
  358.      * @return Collection<Token>
  359.      */
  360.     public function getRefreshTokens()
  361.     {
  362.         return $this->refreshTokens;
  363.     }
  364.     public function getCurrentToken(): ?Token
  365.     {
  366.         return $this->currentToken;
  367.     }
  368.     public function setCurrentToken(Token $currentToken): self
  369.     {
  370.         $this->currentToken $currentToken;
  371.         return $this;
  372.     }
  373.     /**
  374.      * @param $data
  375.      * @param string[] $groups
  376.      */
  377.     public function unserializeTransform($data, array $groups): void
  378.     {
  379.         if (in_array('user_post'$groups)) {
  380.             if (!$this->getRoles()) {
  381.                 $this->addRole(UserRole::ROLE_USER);
  382.             }
  383.             $roles $this->getRoles();
  384.             $this->setRoles([]);
  385.             foreach ($roles as $role) {
  386.                 if (in_array($roleUserRole::getValues())) {
  387.                     $this->addRole($role);
  388.                 }
  389.             }
  390.         }
  391.     }
  392.     public function addRole(string $role): self
  393.     {
  394.         $roles $this->getRoles();
  395.         if (!in_array($role$roles)) {
  396.             $roles[] = $role;
  397.             $this->setRoles($roles);
  398.         }
  399.         return $this;
  400.     }
  401.     public function removeRole(string $role): self
  402.     {
  403.         $roles $this->getRoles();
  404.         if (($key array_search($role$roles)) !== false) {
  405.             unset($roles[$key]);
  406.             $this->setRoles($roles);
  407.         }
  408.         return $this;
  409.     }
  410.     public function hasRole(string $role): bool
  411.     {
  412.         return in_array($role$this->getRoles());
  413.     }
  414.     public function addToken(Token $token): self
  415.     {
  416.         if (!$this->tokens->contains($token)) {
  417.             $this->tokens->add($token);
  418.         }
  419.         return $this;
  420.     }
  421.     public function addRefreshToken(RefreshToken $refreshToken): self
  422.     {
  423.         if (!$this->refreshTokens->contains($refreshToken)) {
  424.             $this->refreshTokens->add($refreshToken);
  425.         }
  426.         return $this;
  427.     }
  428.     public function getUser(): User
  429.     {
  430.         return $this;
  431.     }
  432.     /**
  433.      * @return Collection<int, Card>
  434.      */
  435.     public function getCards(): Collection
  436.     {
  437.         return $this->cards;
  438.     }
  439.     public function addCard(Card $card): static
  440.     {
  441.         if (!$this->cards->contains($card)) {
  442.             $this->cards->add($card);
  443.             $card->setUser($this);
  444.         }
  445.         return $this;
  446.     }
  447.     public function removeCard(Card $card): static
  448.     {
  449.         if ($this->cards->removeElement($card)) {
  450.             // set the owning side to null (unless already changed)
  451.             if ($card->getUser() === $this) {
  452.                 $card->setUser(null);
  453.             }
  454.         }
  455.         return $this;
  456.     }
  457.     public function getCountry(): ?string
  458.     {
  459.         return $this->country;
  460.     }
  461.     public function setCountry(?string $country): static
  462.     {
  463.         $this->country $country;
  464.         return $this;
  465.     }
  466.     public function getNationality(): ?string
  467.     {
  468.         return $this->nationality;
  469.     }
  470.     public function setNationality(?string $nationality): static
  471.     {
  472.         $this->nationality $nationality;
  473.         return $this;
  474.     }
  475.     /**
  476.      * @return Collection<int, MediaObject>
  477.      */
  478.     public function getFile(): Collection
  479.     {
  480.         return $this->file;
  481.     }
  482.     public function addFile(MediaObject $file): static
  483.     {
  484.         if (!$this->file->contains($file)) {
  485.             $this->file->add($file);
  486.             $file->setUser($this);
  487.         }
  488.         return $this;
  489.     }
  490.     public function removeFile(MediaObject $file): static
  491.     {
  492.         if ($this->file->removeElement($file)) {
  493.             // set the owning side to null (unless already changed)
  494.             if ($file->getUser() === $this) {
  495.                 $file->setUser(null);
  496.             }
  497.         }
  498.         return $this;
  499.     }
  500.     public function getIsExist(): ?bool
  501.     {
  502.         return $this->isExist;
  503.     }
  504.     public function setIsExist(bool $isExist): static
  505.     {
  506.         $this->isExist $isExist;
  507.         return $this;
  508.     }
  509.     public function getSignatureImage(): ?string
  510.     {
  511.         return $this->signatureImage;
  512.     }
  513.     public function setSignatureImage(?string $signatureImage): static
  514.     {
  515.         $this->signatureImage $signatureImage;
  516.         return $this;
  517.     }
  518.     public function getCity(): ?string
  519.     {
  520.         return $this->city;
  521.     }
  522.     public function setCity(?string $city): static
  523.     {
  524.         $this->city $city;
  525.         return $this;
  526.     }
  527.     public function getCompany(): ?Company
  528.     {
  529.         return $this->company;
  530.     }
  531.     public function setCompany(?Company $company): static
  532.     {
  533.         $this->company $company;
  534.         return $this;
  535.     }
  536. }