<?php 
 
namespace App\Entity; 
 
use ApiPlatform\Doctrine\Orm\Filter\SearchFilter; 
use ApiPlatform\Metadata\ApiFilter; 
use ApiPlatform\Metadata\ApiResource; 
use ApiPlatform\Metadata\GetCollection; 
use ApiPlatform\Metadata\Post; 
use ApiPlatform\Metadata\Put; 
use App\Controller\Action\SiteQuestionsWriteController; 
use App\Repository\SiteQuestionsRepository; 
use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Serializer\Annotation\Groups; 
 
#[ORM\Entity(repositoryClass: SiteQuestionsRepository::class)] 
#[ApiResource( 
    operations: [ 
        new GetCollection(), 
        new Post( 
            uriTemplate: 'site_questions/save_questions', 
            controller: SiteQuestionsWriteController::class, 
            read: false, 
            write: false, 
            name: '_api_/site_questions/save_questions' 
        ), 
        new Put() 
    ], 
    normalizationContext: ['groups' => ['siteQuestion.get', 'question.get']], 
    denormalizationContext: ['groups' => ['siteQuestion.write']] 
)] 
#[ApiFilter( 
    SearchFilter::class, 
    properties: [ 
        'user.id' => 'exact', 
    ] 
)] 
class SiteQuestions 
{ 
    #[ORM\Id] 
    #[ORM\GeneratedValue] 
    #[ORM\Column] 
    #[Groups(['siteQuestion.get', 'question.get'])] 
    private ?int $id = null; 
 
    #[ORM\ManyToOne(inversedBy: 'siteQuestions')] 
    #[ORM\JoinColumn(nullable: false)] 
    #[Groups(['siteQuestion.get', 'siteQuestion.write', 'question.get'])] 
    private ?Site $site = null; 
 
    #[ORM\ManyToOne(inversedBy: 'siteQuestions')] 
    #[ORM\JoinColumn(nullable: false)] 
    #[Groups(['siteQuestion.get', 'siteQuestion.write', 'question.get'])] 
    private ?Questions $questions = null; 
 
    #[ORM\ManyToOne(inversedBy: 'siteQuestions')] 
    #[ORM\JoinColumn(nullable: false)] 
    #[Groups(['siteQuestion.get', 'siteQuestion.write'])] 
    private ?User $user = null; 
 
    #[ORM\Column(nullable: true)] 
    #[Groups(['siteQuestion.get', 'siteQuestion.write', 'question.get'])] 
    private ?bool $response = null; 
 
    #[ORM\Column(nullable: true)] 
    #[Groups(['siteQuestion.get', 'siteQuestion.write'])] 
    private ?\DateTimeImmutable $createdAt = null; 
 
    #[ORM\Column(nullable: true)] 
    #[Groups(['siteQuestion.get', 'siteQuestion.write'])] 
    private ?\DateTimeImmutable $updatedAt = null; 
 
    public function __construct() 
    { 
        $this->updatedAt = new \DateTimeImmutable(); 
    } 
 
    public function getId(): ?int 
    { 
        return $this->id; 
    } 
 
    public function getSite(): ?Site 
    { 
        return $this->site; 
    } 
 
    public function setSite(?Site $site): self 
    { 
        $this->site = $site; 
 
        return $this; 
    } 
 
    public function getQuestions(): ?Questions 
    { 
        return $this->questions; 
    } 
 
    public function setQuestions(?Questions $questions): self 
    { 
        $this->questions = $questions; 
 
        return $this; 
    } 
 
    public function getUser(): ?User 
    { 
        return $this->user; 
    } 
 
    public function setUser(?User $user): self 
    { 
        $this->user = $user; 
 
        return $this; 
    } 
 
    public function isResponse(): ?bool 
    { 
        return $this->response; 
    } 
 
    public function setResponse(?bool $response): self 
    { 
        $this->response = $response; 
 
        return $this; 
    } 
 
    public function getCreatedAt(): ?\DateTimeImmutable 
    { 
        return $this->createdAt; 
    } 
 
    public function setCreatedAt(\DateTimeImmutable $createdAt): self 
    { 
        $this->createdAt = $createdAt; 
 
        return $this; 
    } 
 
    public function getUpdatedAt(): ?\DateTimeImmutable 
    { 
        return $this->updatedAt; 
    } 
 
    public function setUpdatedAt(\DateTimeImmutable $updatedAt): self 
    { 
        $this->updatedAt = new \DateTimeImmutable();; 
        return $this; 
    } 
}