<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiProperty;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Repository\DayEventRepository;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass=DayEventRepository::class)
* @ORM\HasLifecycleCallbacks()
* @ApiResource(
* denormalizationContext={"groups"={"day_event:write"}},
* collectionOperations={
* "post_day_event"={
* "method"="POST",
* "path"="/day_events",
* "controller"="App\Controller\Api\DayEventController::post",
* "security"="is_granted('ROLE_USER')",
* "openapi_context"={
* "summary"="Creates a new DayEvent resource",
* "description"="Creation of a new DayEvent resource with tvUser auto fill"
* }
* }},
* itemOperations={
* "get" = {
* "security"="is_granted('ROLE_ADMIN')"
* }
* }
* )
*/
class DayEvent
{
const DAY_END = 'day_end';
const DAY_REDO = 'day_redo';
const TYPES = [
self::DAY_END,
self::DAY_REDO,
];
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer", options={"comment":"Clé primaire"})
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity=Day::class, inversedBy="dayEvents")
* @ORM\JoinColumn(nullable=false)
* @Groups({"day_event:write"})
*/
private $day;
/**
* @ORM\ManyToOne(targetEntity=TvUser::class, inversedBy="dayEvents")
* @ORM\JoinColumn(nullable=true)
*/
private $tvUser;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="dayEvents")
* @ORM\JoinColumn(nullable=true)
* @Assert\NotNull
*/
private $user;
/**
* @ORM\Column(type="datetime", options={"comment":"Date et heure de l'évènement"})
* @Gedmo\Timestampable(on="create")
*/
private $createdAt;
/**
* @ORM\Column(type="string", length=255, options={"comment":"Type d'evenenment donné (ex: début de journée, fin de journée, ...)"})
* @Groups({"day_event:write"})
* @Assert\Choice(choices=self::TYPES, message="day_event.types")
* @ApiProperty(
* attributes={
* "openapi_context"={"type"="string", "enum"=self::TYPES, "example"="day_end|day_redo"}
* }
* )
*/
private $type;
public function getId(): ?int
{
return $this->id;
}
public function getDay(): ?Day
{
return $this->day;
}
public function setDay(?Day $day): self
{
$this->day = $day;
return $this;
}
public function getTvUser(): ?TvUser
{
return $this->tvUser;
}
public function setTvUser(?TvUser $tvUser): self
{
$this->tvUser = $tvUser;
return $this;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->createdAt;
}
public function setCreatedAt(\DateTimeInterface $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
public function getType(): ?string
{
return $this->type;
}
public function setType(string $type): self
{
$this->type = $type;
return $this;
}
public static function getImplodedTypes(): string
{
return implode('|', self::TYPES);
}
}