<?php
namespace App\Entity\Participation;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Controller\Api\Participation\Draw\GetParticipationDrawsByUser;
use App\Controller\Api\Participation\Draw\GetParticipationDrawsByUserByOperation;
use App\Controller\Api\Participation\Draw\PostParticipationDraw;
use App\Entity\OperationCode\DrawCode;
use App\Repository\Participation\DrawRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as Serializer;
use JMS\Serializer\Annotation\ExclusionPolicy;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Serializer\Annotation\SerializedName;
/**
* @ORM\Entity(repositoryClass=DrawRepository::class)
* @ExclusionPolicy("all")
* @ApiResource(
* messenger=true,
* shortName="participation-draw",
* attributes={
* "force_eager"=false,
* "normalization_context"={
* "groups"={
* "ParticipationDraw:output",
* "ParticipationDraw:io",
* },
* "enable_max_depth"=true
* },
* "denormalization_context"={
* "groups"={
* "ParticipationDraw:input",
* "ParticipationDraw:io",
* },
* "enable_max_depth"=true
* }
* },
* collectionOperations={
* "get",
* "post",
* "post-public"={
* "method"="POST",
* "path"="/public/draw/{operationId}/{userId}/{templateId}",
* "controller"=PostParticipationDraw::class,
* "access_control"="is_granted('ROLE_PUBLIC')"
* },
* "get-by-user"={
* "method"="GET",
* "path"="/participation-draws/user",
* "access_control"="is_granted('ROLE_USER')",
* "validation_groups"={"get_participation-draws_by_user"},
* "controller"=GetParticipationDrawsByUser::class,
* "defaults"={"_api_receive"=false},
* },
* "get-by-user-by-operation"={
* "method"="GET",
* "path"="/participation-draws/user/operation/{operationId}",
* "access_control"="is_granted('ROLE_USER')",
* "validation_groups"={"get_participation-draws_by_user"},
* "controller"=GetParticipationDrawsByUserByOperation::class,
* "defaults"={"_api_receive"=false},
* },
* },
* itemOperations={
* "get",
* "put"={
* "validation_groups"={"Default", "Edit"}
* },
* },
* )
*/
class Draw extends Participation
{
/**
* @ORM\OneToMany(targetEntity=DrawCode::class, mappedBy="participation")
* @SerializedName("gift_codes")
* @Groups({
* "Order:output",
* })
*/
protected Collection $operationCodes;
public function __construct()
{
parent::__construct();
$this->operationCodes = new ArrayCollection();
}
public function getOperationCodes(): Collection
{
return $this->operationCodes;
}
public function addOperationCode(DrawCode $operationCode): self
{
if (!$this->operationCodes->contains($operationCode)) {
$this->operationCodes[] = $operationCode;
}
return $this;
}
public function removeOperationCode(DrawCode $operationCode): self
{
$this->operationCodes->removeElement($operationCode);
return $this;
}
/**
* @Serializer\VirtualProperty
* @Serializer\Groups({"shannon"})
* @Serializer\SerializedName("participation_id")
* @return string
*/
public function getParticipationId(): string
{
return $this->id;
}
/**
* Get opt-in RGPD.
*
* @Serializer\VirtualProperty
* @Serializer\Groups({"shannon"})
* @Serializer\SerializedName("optin_rgpd")
* @return int
*/
public function intOptInRGPD(): int
{
return true;
}
/**
* @Serializer\VirtualProperty
* @Serializer\Groups({"shannon"})
* @Serializer\SerializedName("action")
* @return string
*/
public function getAction(): string
{
return 'create';
}
/**
* @Serializer\VirtualProperty
* @Serializer\Groups({"shannon"})
* @Serializer\SerializedName("channel")
* @return string
*/
public function getChannel(): string
{
return 'FW';
}
/**
* @Serializer\VirtualProperty
* @Serializer\Groups({"shannon"})
* @Serializer\SerializedName("date_participation")
* @return string
*/
public function getDateParticipation(): string
{
return $this->getCreatedAt()->format('Y-m-d H:i:s');
}
}