<?php
namespace App\GamificationBundle\Entity;
use App\ProfileBundle\Entity\User;
use DateTimeImmutable;
use Doctrine\ORM\Mapping as ORM;
use App\CmsBundle\Entity\IdTrait;
/**
* UserGamificationStat
*
* @ORM\Table(
* name="user_gamification_stat",
* uniqueConstraints={@ORM\UniqueConstraint(columns={"user_id"})}
* )
* @ORM\Entity(repositoryClass="App\GamificationBundle\Repository\UserGamificationStatRepository")
*/
class UserGamificationStat
{
use IdTrait;
/**
* @ORM\OneToOne(targetEntity="App\ProfileBundle\Entity\User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
*/
private User $user;
/**
* @var int
* @ORM\Column(type="integer", options={"default":0})
*/
private int $questsCompleted = 0;
/**
* @var int
* @ORM\Column(type="integer", options={"default":0})
*/
private int $coinsEarned = 0;
/**
* @var ?DateTimeImmutable
* @ORM\Column(type="datetime_immutable", nullable=true)
*/
private ?DateTimeImmutable $lastQuestCompletedAt = null;
/**
* @var bool
* @ORM\Column(type="boolean", nullable=false, options={"default": false})
*/
private bool $questCompletedFired = false;
/**
* @var bool
* @ORM\Column(type="boolean", nullable=false, options={"default": false})
*/
private bool $coinsEarnedFired = false;
/**
* @var ?DateTimeImmutable
* @ORM\Column(type="datetime_immutable", nullable=true)
*/
private ?DateTimeImmutable $lastIdleFiredAt = null;
public function __construct(User $user)
{
$this->user = $user;
}
/**
* @return User
*/
public function getUser(): User
{
return $this->user;
}
/**
* @param User|null $user
* @return $this
*/
public function setUser(User $user): self
{
$this->user = $user;
return $this;
}
/**
* @return int
*/
public function getQuestsCompleted(): int
{
return $this->questsCompleted;
}
/**
* @param int $questsCompleted
* @return $this
*/
public function setQuestsCompleted(int $questsCompleted): self
{
$this->questsCompleted = $questsCompleted;
return $this;
}
/**
* @param int $by
* @return $this
*/
public function incrementQuestsCompleted(int $by = 1): self
{
$this->questsCompleted += $by;
return $this;
}
/**
* @return int
*/
public function getCoinsEarned(): int
{
return $this->coinsEarned;
}
/**
* @param int $coinsEarned
* @return $this
*/
public function setCoinsEarned(int $coinsEarned): self
{
$this->coinsEarned = $coinsEarned;
return $this;
}
/**
* @param int $coins
* @return $this
*/
public function addCoins(int $coins): self
{
$this->coinsEarned += $coins;
return $this;
}
/**
* @return bool
*/
public function isQuestCompletedFired(): bool
{
return $this->questCompletedFired;
}
/**
* @param bool $questCompletedFired
* @return $this
*/
public function setQuestCompletedFired(bool $questCompletedFired): self
{
$this->questCompletedFired = $questCompletedFired;
return $this;
}
/**
* @return bool
*/
public function isCoinsEarnedFired(): bool
{
return $this->coinsEarnedFired;
}
/**
* @param bool $coinsEarnedFired
* @return $this
*/
public function setCoinsEarnedFired(bool $coinsEarnedFired): self
{
$this->coinsEarnedFired = $coinsEarnedFired;
return $this;
}
/**
* @return DateTimeImmutable|null
*/
public function getLastQuestCompletedAt(): ?DateTimeImmutable
{
return $this->lastQuestCompletedAt;
}
/**
* @param DateTimeImmutable|null $lastQuestCompletedAt
* @return $this
*/
public function setLastQuestCompletedAt(?DateTimeImmutable $lastQuestCompletedAt): self
{
$this->lastQuestCompletedAt = $lastQuestCompletedAt;
return $this;
}
/**
* @return DateTimeImmutable|null
*/
public function getLastIdleFiredAt(): ?DateTimeImmutable
{
return $this->lastIdleFiredAt;
}
/**
* @param DateTimeImmutable|null $lastIdleFiredAt
* @return $this
*/
public function setLastIdleFiredAt(?DateTimeImmutable $lastIdleFiredAt): self
{
$this->lastIdleFiredAt = $lastIdleFiredAt;
return $this;
}
}