<?phpnamespace App\Entity;use App\Services\TokenGenerator;use DateTime;use DateTimeInterface;use Doctrine\ORM\Mapping as ORM;use Exception;use Gedmo\Timestampable\Traits\TimestampableEntity;/** * @ORM\Entity(repositoryClass="App\Repository\TokenUserRepository") */class TokenUser{ use TimestampableEntity; public const TOKEN_RECUPERATE_PASSWORD = 'recuperate_password'; public const TOKEN_REGISTER = 'register'; public const TOKEN_ACTIVE_USER = 'active_user'; /** * @var int * @ORM\Id() * @ORM\GeneratedValue() * @ORM\Column(type="integer") */ private $id; /** * @var string * @ORM\Column(type="text") */ private $token; /** * @ORM\ManyToOne(targetEntity="User", inversedBy="tokens" ,cascade={"persist"}) */ private $user; /** * @ORM\Column(type="datetime",nullable=true) */ private $expiredAt; /** * @var string * @ORM\Column(type="string", length=255) */ private $type; /** * @var bool * @ORM\Column(type="boolean") */ private $enabled; /** * TokenUser constructor. * * @throws Exception */ public function __construct() { $generator = new TokenGenerator(); $this->token = $generator->generateToken(); $this->enabled = true; } public function getId(): ?int { return $this->id; } public function getToken(): ?string { return $this->token; } /** * @return $this */ public function setToken(string $token): self { $this->token = $token; return $this; } public function getCreatedAt(): ?DateTimeInterface { return $this->createdAt; } /** * @return $this */ public function setCreatedAt(DateTimeInterface $createdAt): self { $this->createdAt = $createdAt; return $this; } public function getUpdatedAt(): ?DateTimeInterface { return $this->updatedAt; } /** * @return $this */ public function setUpdatedAt(DateTimeInterface $updatedAt): self { $this->updatedAt = $updatedAt; return $this; } public function getExpiredAt(): ?DateTimeInterface { return $this->expiredAt; } /** * @return $this */ public function setExpiredAt(DateTimeInterface $expiredAt): self { $this->expiredAt = $expiredAt; return $this; } public function getType(): ?string { return $this->type; } /** * @return $this */ public function setType(string $type): self { $this->type = $type; //Set expired time switch ($type) { case $this::TOKEN_RECUPERATE_PASSWORD: $this->expiredAt = new DateTime('+3 day'); break; case $this::TOKEN_ACTIVE_USER: $this->expiredAt = new DateTime('+1 month'); break; default: $this->expiredAt = new DateTime(); break; } return $this; } public function getUser(): ?User { return $this->user; } /** * @return $this */ public function setUser(?User $user): self { $this->user = $user; return $this; } public function getEnabled(): ?bool { return $this->enabled; } /** * @return $this */ public function setEnabled(bool $enabled): self { $this->enabled = $enabled; return $this; }}