<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use App\Filter\ElCourseJoinFilter;
use ApiPlatform\Core\Annotation\ApiFilter;
use App\Repository\ElCourseJoinRepository;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Entity\Interfaces\ContainerMappedInterface;
use Symfony\Component\Serializer\Annotation\Groups;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\DateFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\RangeFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
/**
* @ApiResource(
* collectionOperations={
* "get"={
* "security"="is_granted('ROLE_OPERATOR')",
* "normalization_context"={"groups"={"ElCourseJoin:Read"}, "skip_null_values"=false}
* },
* "get_my"={
* "path"="/el_course_joins/get-my",
* "method"="GET",
* "security"="is_granted('IS_AUTHENTICATED_FULLY')",
* "normalization_context"={"groups"={"ElCourseJoin:Read"}, "skip_null_values"=false}
* },
* "post_join_course"={
* "route_name"="api_el_course_join_join_course",
* "method"="POST",
* "security"="is_granted('IS_AUTHENTICATED_FULLY')",
* "denormalization_context"={"groups"={"ElCourseJoin:Join-Course"}}
* }
* },
* itemOperations={
* "get"={
* "security"="is_granted('IS_CO_ANY_SPE', object)",
* "normalization_context"={"groups"={"ElCourseJoin:Read"}, "skip_null_values"=false}
* }
* }
* )
* @ApiFilter(SearchFilter::class, properties={"id": "exact", "container.id": "exact", "elCourse.id": "exact", "user.id": "exact"})
* @ApiFilter(DateFilter::class, properties={"joinDate"})
* @ApiFilter(ElCourseJoinFilter::class, properties={"search": "partial"})
* @ApiFilter(OrderFilter::class, properties={"id", "joinDate"})
* @ApiFilter(RangeFilter::class, properties={"progress"})
* @ORM\Entity(repositoryClass=ElCourseJoinRepository::class)
*/
class ElCourseJoin implements ContainerMappedInterface
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({"ElCourseJoin:Read", "User:Me"})
*/
private $id;
/**
* @ORM\Column(type="datetime")
* @Groups({"ElCourseJoin:Read", "User:Me"})
*/
private $joinDate;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="elCourseJoins")
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
* @Groups({"ElCourseJoin:Read"})
*/
private $user;
/**
* @ORM\ManyToOne(targetEntity=ElCourse::class, inversedBy="elCourseJoins")
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
* @Groups({"ElCourseJoin:Read", "ElCourseJoin:Join-Course", "User:Me"})
*/
private $elCourse;
/**
* @ORM\ManyToOne(targetEntity=Container::class)
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
* @Groups({"ElCourseJoin:Join-Course"})
*/
private $container;
/**
* @ORM\Column(type="integer", nullable=true)
* @Groups({"ElCourseJoin:Read", "User:Me"})
*/
private $progress;
/**
* @ORM\Column(type="string", length=32, nullable=true)
* @Groups({"ElCourseJoin:Read", "User:Me"})
*/
private $lastStarted;
/**
* @ORM\Column(type="string", length=32, nullable=true)
* @Groups({"ElCourseJoin:Read", "User:Me"})
*/
private $lastEnded;
/**
* @ORM\Column(type="integer", nullable=true)
* @Groups({"ElCourseJoin:Read", "User:Me"})
*/
private $lastStartedElLessionTopicId;
/**
* @ORM\Column(type="integer", nullable=true)
* @Groups({"ElCourseJoin:Read", "User:Me"})
*/
private $lastStartedElLessionId;
public function getId(): ?int
{
return $this->id;
}
public function getJoinDate(): ?\DateTimeInterface
{
return $this->joinDate;
}
public function setJoinDate(\DateTimeInterface $joinDate): self
{
$this->joinDate = $joinDate;
return $this;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
public function getElCourse(): ?ElCourse
{
return $this->elCourse;
}
public function setElCourse(?ElCourse $elCourse): self
{
$this->elCourse = $elCourse;
return $this;
}
public function getContainer(): ?Container
{
return $this->container;
}
public function setContainer(?Container $container): self
{
$this->container = $container;
return $this;
}
public function getProgress(): ?int
{
return $this->progress;
}
public function setProgress(?int $progress): self
{
$this->progress = $progress;
return $this;
}
public function getLastStarted(): ?string
{
return $this->lastStarted;
}
public function setLastStarted(?string $lastStarted): self
{
$this->lastStarted = $lastStarted;
return $this;
}
public function getLastEnded(): ?string
{
return $this->lastEnded;
}
public function setLastEnded(?string $lastEnded): self
{
$this->lastEnded = $lastEnded;
return $this;
}
public function getLastStartedElLessionTopicId(): ?int
{
return $this->lastStartedElLessionTopicId;
}
public function setLastStartedElLessionTopicId(?int $lastStartedElLessionTopicId): self
{
$this->lastStartedElLessionTopicId = $lastStartedElLessionTopicId;
return $this;
}
public function getLastStartedElLessionId(): ?int
{
return $this->lastStartedElLessionId;
}
public function setLastStartedElLessionId(?int $lastStartedElLessionId): self
{
$this->lastStartedElLessionId = $lastStartedElLessionId;
return $this;
}
}