src/Database/Domain/Entity/User/User.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\Database\Domain\Entity\User;
  3. use App\Database\Domain\Entity\AbstractEntity;
  4. use App\Database\Domain\Entity\Sessions\ToastSession;
  5. use App\Database\Domain\Traits\CreationDateTrait;
  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\UserInterface;
  11. use Symfony\Component\Validator\Constraints as Assert;
  12. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  13. /**
  14.  * @ORM\Entity(repositoryClass="App\Database\Domain\Repository\UserRepository")
  15.  *
  16.  * @UniqueEntity(fields={"username"}, message="User already exists.")
  17.  */
  18. class User extends AbstractEntity implements UserInterfacePasswordAuthenticatedUserInterface
  19. {
  20.     use CreationDateTrait;
  21.     public const ROLE_USER 'ROLE_USER';
  22.     public const ROLE_NOT_REGISTERED_USER 'ROLE_NOT_REGISTERED_USER';
  23.     /**
  24.      * @ORM\Column(type="string", nullable=true)
  25.      */
  26.     private ?string $password;
  27.     /**
  28.      * @ORM\Column(type="string", nullable=false)
  29.      *
  30.      * @Assert\Length(max="255")
  31.      */
  32.     private string $username '';
  33.     /**
  34.      * @ORM\Column(type="json")
  35.      */
  36.     private array $roles = [];
  37.     /**
  38.      * @ORM\OneToOne(targetEntity="App\Database\Domain\Entity\User\UserAppleData", cascade={"all"})
  39.      *
  40.      * @ORM\JoinColumn(nullable=true)
  41.      *
  42.      * @Assert\Valid()
  43.      */
  44.     private ?UserAppleData $appleData;
  45.     /**
  46.      * @ORM\OneToOne(targetEntity="App\Database\Domain\Entity\User\UserMembership", cascade={"all"})
  47.      *
  48.      * @Assert\Valid()
  49.      */
  50.     private UserMembership $membership;
  51.     /**
  52.      * @ORM\OneToOne(targetEntity="App\Database\Domain\Entity\User\UserAvatar", cascade={"all"})
  53.      *
  54.      * @Assert\Valid()
  55.      */
  56.     private UserAvatar $avatar;
  57.     /**
  58.      * @ORM\OneToOne(targetEntity="App\Database\Domain\Entity\User\UserProfile", cascade={"all"})
  59.      *
  60.      * @Assert\Valid()
  61.      */
  62.     private UserProfile $profile;
  63.     /**
  64.      * @ORM\OneToOne(targetEntity="App\Database\Domain\Entity\User\UserStripeMember", fetch="EXTRA_LAZY", cascade={"all"})
  65.      *
  66.      * @ORM\JoinColumn(nullable=true)
  67.      *
  68.      * @Assert\Valid()
  69.      */
  70.     private ?UserStripeMember $stripeMember;
  71.     /**
  72.      * @ORM\OneToMany(targetEntity="App\Database\Domain\Entity\User\UserNotification", mappedBy="user", fetch="EXTRA_LAZY", cascade={"all"})
  73.      *
  74.      * @ORM\Cache(usage="NONSTRICT_READ_WRITE", region="write_rare")
  75.      *
  76.      * @var Collection<int, UserNotification>
  77.      */
  78.     private Collection $notifications;
  79.     /**
  80.      * @ORM\OneToMany(targetEntity="App\Database\Domain\Entity\Sessions\ToastSession", mappedBy="user", fetch="EXTRA_LAZY", cascade={"all"})
  81.      *
  82.      * @ORM\OrderBy({"orderIndex": "ASC"})
  83.      *
  84.      * @ORM\Cache(usage="NONSTRICT_READ_WRITE", region="write_rare")
  85.      *
  86.      * @var Collection<int, ToastSession>
  87.      */
  88.     private Collection $sessions;
  89.     /**
  90.      * @ORM\OneToMany(targetEntity="App\Database\Domain\Entity\Sessions\ToastSessionSection", mappedBy="user", fetch="EXTRA_LAZY", cascade={"all"})
  91.      *
  92.      * @ORM\OrderBy({"orderIndex": "ASC"})
  93.      *
  94.      * @ORM\Cache(usage="NONSTRICT_READ_WRITE", region="write_rare")
  95.      *
  96.      * @var Collection<int, \App\Database\Domain\Entity\Sessions\ToastSessionSection>
  97.      */
  98.     private Collection $sections;
  99.     /**
  100.      * @ORM\Column(type="string", nullable=true)
  101.      */
  102.     private ?string $userAgent;
  103.     /**
  104.      * @ORM\Column(type="boolean", options={"default"= 1})
  105.      */
  106.     private bool $areNotificationsEnabled true;
  107.     /**
  108.      * @ORM\Column(type="string", nullable=true)
  109.      */
  110.     private ?string $notRegisteredToken null;
  111.     /**
  112.      * @ORM\Column(type="integer", nullable=false, options={"default" = 0})
  113.      */
  114.     private int $migratedFromNotRegistered 0;
  115.     /**
  116.      * @ORM\Column(type="string", nullable=true, unique=true)
  117.      */
  118.     private ?string $migrateCode null;
  119.     /**
  120.      * @ORM\Column(type="date_immutable", nullable=true)
  121.      */
  122.     private ?\DateTimeInterface $lastActivity null;
  123.     public function __construct(
  124.         string $id,
  125.         string $username,
  126.         ?string $password,
  127.         UserAvatar $avatar,
  128.         UserMembership $membership,
  129.         UserProfile $profile
  130.     ) {
  131.         $this->id $id;
  132.         $this->username $username;
  133.         $this->password $password;
  134.         $this->avatar $avatar;
  135.         $this->membership $membership;
  136.         $this->profile $profile;
  137.         $this->appleData null;
  138.         $this->stripeMember null;
  139.         $this->roles = [self::ROLE_NOT_REGISTERED_USER];
  140.         $this->creationDate = new \DateTimeImmutable();
  141.         $this->sessions = new ArrayCollection();
  142.         $this->notifications = new ArrayCollection();
  143.         $this->sections = new ArrayCollection();
  144.     }
  145.     public function setUserAgent(?string $userAgent): void
  146.     {
  147.         $this->userAgent $userAgent;
  148.     }
  149.     public function getPassword(): ?string
  150.     {
  151.         return $this->password;
  152.     }
  153.     public function setPassword(string $password): self
  154.     {
  155.         $this->password $password;
  156.         return $this;
  157.     }
  158.     public function getUsername(): string
  159.     {
  160.         return $this->username;
  161.     }
  162.     public function setUsername(string $username): self
  163.     {
  164.         $this->username $username;
  165.         return $this;
  166.     }
  167.     public function getUserIdentifier(): string
  168.     {
  169.         return $this->getUsername();
  170.     }
  171.     public function getRoles(): array
  172.     {
  173.         return $this->roles;
  174.     }
  175.     public function setRoles(array $roles): self
  176.     {
  177.         $this->roles $roles;
  178.         return $this;
  179.     }
  180.     public function getAppleData(): ?UserAppleData
  181.     {
  182.         return $this->appleData;
  183.     }
  184.     public function setAppleData(UserAppleData $appleData): self
  185.     {
  186.         $this->appleData $appleData;
  187.         return $this;
  188.     }
  189.     public function getMembership(): UserMembership
  190.     {
  191.         return $this->membership;
  192.     }
  193.     public function setMembership(UserMembership $membership): self
  194.     {
  195.         $this->membership $membership;
  196.         return $this;
  197.     }
  198.     public function getAvatar(): UserAvatar
  199.     {
  200.         return $this->avatar;
  201.     }
  202.     public function setAvatar(UserAvatar $avatar): self
  203.     {
  204.         $this->avatar $avatar;
  205.         return $this;
  206.     }
  207.     public function getProfile(): UserProfile
  208.     {
  209.         return $this->profile;
  210.     }
  211.     public function setProfile(UserProfile $profile): self
  212.     {
  213.         $this->profile $profile;
  214.         return $this;
  215.     }
  216.     public function getStripeMember(): ?UserStripeMember
  217.     {
  218.         return $this->stripeMember;
  219.     }
  220.     public function setStripeMember(UserStripeMember $stripeMember): self
  221.     {
  222.         $this->stripeMember $stripeMember;
  223.         return $this;
  224.     }
  225.     /**
  226.      * @return Collection|ToastSession[]
  227.      */
  228.     public function getSessions()
  229.     {
  230.         return $this->sessions;
  231.     }
  232.     public function addSession(ToastSession $session)
  233.     {
  234.         $this->sessions[] = $session;
  235.         return $this;
  236.     }
  237.     public function clearSessions(): void
  238.     {
  239.         $this->sessions = new ArrayCollection();
  240.     }
  241.     public function areNotificationsEnabled(): bool
  242.     {
  243.         return $this->areNotificationsEnabled;
  244.     }
  245.     public function setNotificationsEnabled(bool $areEnabled)
  246.     {
  247.         $this->areNotificationsEnabled $areEnabled;
  248.         return $this;
  249.     }
  250.     public function getSalt(): ?string
  251.     {
  252.         // TODO: Implement getSalt() method.
  253.         return null;
  254.     }
  255.     public function eraseCredentials()
  256.     {
  257.         // TODO: Implement eraseCredentials() method.
  258.     }
  259.     public function getNotRegisteredToken(): ?string
  260.     {
  261.         return $this->notRegisteredToken;
  262.     }
  263.     public function setNotRegisteredToken(?string $notRegisteredToken): void
  264.     {
  265.         $this->notRegisteredToken $notRegisteredToken;
  266.     }
  267.     public function getMigratedFromNotRegistered(): int
  268.     {
  269.         return $this->migratedFromNotRegistered;
  270.     }
  271.     public function setMigratedFromNotRegistered(int $migratedFromNotRegistered): void
  272.     {
  273.         $this->migratedFromNotRegistered $migratedFromNotRegistered;
  274.     }
  275.     public function getLastActivity(): ?\DateTimeInterface
  276.     {
  277.         return $this->lastActivity;
  278.     }
  279.     public function setLastActivity(?\DateTimeInterface $lastActivity): void
  280.     {
  281.         $this->lastActivity $lastActivity;
  282.     }
  283.     public function isFullUser(): bool
  284.     {
  285.         return in_array(self::ROLE_USER$this->roles);
  286.     }
  287.     public function isPartialUser(): bool
  288.     {
  289.         return in_array(self::ROLE_NOT_REGISTERED_USER$this->roles);
  290.     }
  291.     public function getMigrateCode(): ?string
  292.     {
  293.         return $this->migrateCode;
  294.     }
  295.     public function setMigrateCode(?string $migrateCode): void
  296.     {
  297.         $this->migrateCode $migrateCode;
  298.     }
  299.     public function getSections(): Collection
  300.     {
  301.         return $this->sections;
  302.     }
  303.     public function setSections(Collection $sections): void
  304.     {
  305.         $this->sections $sections;
  306.     }
  307. }