<?php
namespace App\Entity\Operation;
use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\BooleanFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\DateFilter;
use App\Entity\MediaObject\MediaGame;
use App\Entity\MediaObject\MediaMobileGame;
use App\Repository\Operation\GameRepository;
use Doctrine\Common\Annotations\Annotation\IgnoreAnnotation;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Serializer\Annotation\SerializedName;
/**
* @ORM\Entity(repositoryClass=GameRepository::class)
* @ApiResource(
* attributes={
* "normalization_context"={
* "groups"={
* "OperationGame:output",
* "OperationGame:io"
* }
* },
* "denormalization_context"={
* "groups"={
* "OperationGame:input",
* "OperationGame:io"
* }
* },
* "order"={"startDate": "ASC"}
* },
* collectionOperations={
* "post"={
* "method"="POST",
* "access_control"="is_granted('ROLE_ADMIN_SOGEC')",
* },
* "public-get"={
* "path"="/public/games",
* "method"="GET",
* "access_control"="is_granted('ROLE_PUBLIC')",
* },
* "get"={
* "method"="GET",
* "access_control"="is_granted('ROLE_USER')",
* }
* },
* itemOperations={
* "put"={
* "method"="PUT",
* "access_control"="is_granted('ROLE_ADMIN_SOGEC')",
* },
* "get"={
* "method"="GET",
* "access_control"="is_granted('ROLE_USER')",
* },
* "get-public"={
* "method"="GET",
* "path"="/public/game/{id}",
* },
* }
* )
*
*/
class Game extends Operation
{
/**
* @ORM\Column(type="datetime", options={"default": "CURRENT_TIMESTAMP"})
* @Groups({
* "OperationGame:io"
* })
* @ApiFilter(DateFilter::class, strategy=DateFilter::EXCLUDE_NULL)
*/
private $startDate;
/**
* @ORM\Column(type="datetime", options={"default": "CURRENT_TIMESTAMP"})
* @Groups({
* "OperationGame:io"
* })
* @ApiFilter(DateFilter::class, strategy=DateFilter::EXCLUDE_NULL)
*/
private $endDate;
/**
* @ORM\Column(type="datetime", nullable=true)
* @Groups({
* "OperationGame:io"
* })
* @ApiFilter(DateFilter::class, strategy=DateFilter::EXCLUDE_NULL)
*/
private $openingDate;
/**
* @var MediaGame|null
* @ORM\OneToMany(targetEntity=MediaGame::class, mappedBy="game", cascade={"persist"})
* @SerializedName("media_games")
* @Groups({
* "OperationGame:output",
* "MediaGame:io"
* })
*/
private $mediaGames;
/**
* @var MediaMobileGame|null
* @ORM\OneToMany(targetEntity=MediaMobileGame::class, mappedBy="game", cascade={"persist"})
* @SerializedName("mobile_games")
* @Groups({
* "OperationGame:output",
* "MediaMobileGame:io",
* })
*/
private $mobileGames;
/**
* @ORM\Column(type="boolean", options={"default": 0})
* @Groups({
* "OperationGame:io"
* })
* @ApiFilter(BooleanFilter::class)
*/
private bool $online = false;
/**
* @ORM\Column(type="boolean", options={"default": 0})
* @Groups({
* "OperationGame:io",
* })
* @ApiFilter(BooleanFilter::class)
*/
private bool $requireUser = false;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({
* "OperationGame:io",
* })
*/
private string $url;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({
* "OperationGame:io",
* })
*/
private ?string $extend;
/**
* @ORM\Column(type="integer", options={"default": 1})
*/
private $maxPartByUser = 1;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({
* "OperationGame:io",
* })
*/
private ?string $description;
public function __construct()
{
parent::__construct();
$this->mediaGames = new ArrayCollection();
$this->mobileGames = new ArrayCollection();
}
public function getOpeningDate(): ?\DateTimeInterface
{
return $this->openingDate;
}
public function setOpeningDate(?\DateTimeInterface $openingDate): self
{
$this->openingDate = $openingDate;
return $this;
}
public function getStartDate(): ?\DateTimeInterface
{
return $this->startDate;
}
public function setStartDate(\DateTimeInterface $startDate): self
{
$this->startDate = $startDate;
return $this;
}
public function getEndDate(): ?\DateTimeInterface
{
return $this->endDate;
}
public function setEndDate(\DateTimeInterface $endDate): self
{
$this->endDate = $endDate;
return $this;
}
public function isOnline(): bool
{
return (bool) $this->online;
}
public function getOnline(): bool
{
return (bool) $this->online;
}
public function setOnline(bool $online): self
{
$this->online = $online;
return $this;
}
public function isRequireUser(): bool
{
return (bool) $this->requireUser;
}
public function getRequireUser(): bool
{
return (bool) $this->requireUser;
}
public function setRequireUser(bool $requireUser): self
{
$this->requireUser = $requireUser;
return $this;
}
public function getUrl(): ?string
{
return $this->url;
}
public function setUrl(string $url): Game
{
$this->url = $url;
return $this;
}
public function getExtend(): ?string
{
return $this->extend;
}
public function setExtend(?string $extend): Game
{
$this->extend = $extend;
return $this;
}
public function getMaxPartByUser(): ?int
{
return $this->maxPartByUser;
}
public function setMaxPartByUser(int $maxPartByUser): self
{
$this->maxPartByUser = $maxPartByUser;
return $this;
}
public function getMediaGames()
{
return $this->mediaGames;
}
public function setMediaGame(MediaGame $mediaGames): Game
{
$this->mediaGames = $mediaGames;
return $this;
}
public function addMediaGame(MediaGame $mediaGame)
{
if ($this->mediaGames->contains($mediaGame)) {
return;
}
$this->mediaGames[] = $mediaGame;
$mediaGame->setGame($this);
}
public function getMobileGames()
{
return $this->mobileGames;
}
public function setMobileGame(MediaMobileGame $mobileGames): Game
{
$this->mobileGames = $mobileGames;
return $this;
}
public function addMobileGame(MediaMobileGame $mobileGame)
{
if ($this->mobileGames->contains($mobileGame)) {
return;
}
$this->mobileGames[] = $mobileGame;
$mobileGame->setGame($this);
}
/**
* @return string
*/
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
}