<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
use App\Repository\ScheduleRecipientsRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* @ORM\Entity(repositoryClass=ScheduleRecipientsRepository::class)
* @ORM\HasLifecycleCallbacks()
*/
#[ApiResource(
normalizationContext: ['groups' => ['recipient:read']],
denormalizationContext: ['allow_extra_attributes' => true, 'groups' => ['recipient:write']],
attributes: ['security' => "is_granted('ROLE_USER')"],
collectionOperations: [
'get',
'post' => ['security' => "is_granted('ROLE_ADMIN')"],
],
itemOperations: [
'get',
'put' => ['security' => "is_granted('ROLE_ADMIN') or object.owner == user"],
],
)]
#[ApiFilter(SearchFilter::class, properties: ['id', 'user.email' => 'partial'])]
#[ApiFilter(PropertyFilter::class)]
class ScheduleRecipients
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity=CampaignSchedule::class, inversedBy="scheduleRecipients")
* @ORM\JoinColumn(nullable=false)
* @Groups({"recipient:read","recipient:write"})
*/
private $campaignSchedule;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="scheduleRecipients")
* @ORM\JoinColumn(nullable=false)
* @Groups({"recipient:read","recipient:write"})
*/
private $user;
/**
* @ORM\Column(type="string", length=255)
* @Groups({"recipient:read","recipient:write"})
*/
private $email;
/**
* @ORM\Column(type="string", length=255)
* @Groups({"recipient:read","recipient:write"})
*/
private $name;
/**
* @ORM\Column(type="boolean")
* @Groups({"recipient:read","recipient:write"})
*/
private $isDelivered;
public function getId(): ?int
{
return $this->id;
}
public function getCampaignSchedule(): ?CampaignSchedule
{
return $this->campaignSchedule;
}
public function setCampaignSchedule(?CampaignSchedule $campaignSchedule): self
{
$this->campaignSchedule = $campaignSchedule;
return $this;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = $email;
return $this;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getIsDelivered(): ?bool
{
return $this->isDelivered;
}
public function setIsDelivered(bool $isDelivered): self
{
$this->isDelivered = $isDelivered;
return $this;
}
#[Groups(['recipient:read'])]
public function getRecipientNameEmail(): ?string
{
return $this->user->getLastName() . ' ' . $this->user->getFirstName() . '(' . $this->user->getEmail() . ')';
}
}