src/Entity/ForumMessage.php line 68

  1. <?php
  2. namespace App\Entity;
  3. use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
  4. use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
  5. use ApiPlatform\Metadata\ApiFilter;
  6. use ApiPlatform\Metadata\ApiResource;
  7. use ApiPlatform\Metadata\GetCollection;
  8. use ApiPlatform\Metadata\Post;
  9. use ApiPlatform\Metadata\Put;
  10. use App\Controller\Api\Controller\Course\Forum\AnswerForumMessage;
  11. use App\Controller\Api\Controller\Course\Forum\LikeForumMessageController;
  12. use App\Controller\Api\Controller\Course\Forum\NewForumMessage;
  13. use App\Controller\Api\Controller\Course\Forum\SubjectMessages;
  14. use App\Repository\ForumMessageRepository;
  15. use DateTimeImmutable;
  16. use Doctrine\Common\Collections\ArrayCollection;
  17. use Doctrine\Common\Collections\Collection;
  18. use Doctrine\DBAL\Types\Types;
  19. use Doctrine\ORM\Mapping as ORM;
  20. use Symfony\Component\Serializer\Annotation\Groups;
  21. #[ORM\Entity(repositoryClassForumMessageRepository::class)]
  22. #[ApiResource(
  23.     operations: [
  24.         new GetCollection(
  25.             uriTemplate'/sujet/{id}/messages',
  26.             controllerSubjectMessages::class,
  27.             openapiContext: [
  28.                 'description' => "Cette route permet de recuperer la liste des messages d'un sujet donné !"
  29.             ],
  30.             normalizationContext: ['groups' => ['read:forum:messsage:collection']]
  31.         ),
  32.         new Put(
  33.             uriTemplate'/forum_message/{id}/like',
  34.             controllerLikeForumMessageController::class,
  35.             openapiContext: [
  36.                 'security' => [['bearerAuth' => []]]
  37.             ],
  38.             denormalizationContext: ['groups' => ['like:message:forum:items']],
  39.         ),
  40.         new Post(
  41.             uriTemplate'/forum-message/{id}/new-message',
  42.             controllerNewForumMessage::class,
  43.             openapiContext: [
  44.                 'security' => [['bearerAuth' => []]],
  45.                 'description' => "On utilise cette route pour poster un message concernant un sujet. l'id en paramètre est l'id du sujet ou problème"
  46.             ],
  47.             denormalizationContext: ['groups' => ['post:forum:message:item']]
  48.         ),
  49.         new Post(
  50.             uriTemplate'/forum_message/{id}/repondre',
  51.             controllerAnswerForumMessage::class,
  52.             openapiContext: [
  53.                 'security' => [['bearerAuth' => []]],
  54.                 'description' => "On utilise cette route pour répondre à un message du forum. l'id en paramètre est l'id du message au quel on souhaite répondre"
  55.             ],
  56.             denormalizationContext: ['groups' => ['post:forum:message:item']]
  57.         )
  58.     ],
  59.     normalizationContext: ['groups' => ['read:forum:messsage:collection']]
  60. )]
  61. #[
  62.     ApiFilter(SearchFilter::class, properties: ['sujet' => 'exact']),
  63.     ApiFilter(OrderFilter::class, properties: ['$createdAt'])
  64. ]
  65. class ForumMessage
  66. {
  67.     #[ORM\Id]
  68.     #[ORM\GeneratedValue]
  69.     #[ORM\Column]
  70.     #[Groups(['read:sujet:item''read:forum:messsage:collection'])]
  71.     private ?int $id null;
  72.     #[ORM\ManyToOne(inversedBy'forumMessages')]
  73.     #[ORM\JoinColumn(nullablefalse)]
  74.     #[Groups(['read:sujet:item''read:forum:messsage:collection'])]
  75.     private ?Membre $membre null;
  76.     #[ORM\ManyToOne(inversedBy'forumMessages')]
  77.     #[ORM\JoinColumn(nullablefalse)]
  78.     private ?Sujet $sujet null;
  79.     #[ORM\Column]
  80.     #[Groups(['read:sujet:item''read:forum:messsage:collection'])]
  81.     private ?\DateTimeImmutable $createdAt null;
  82.     #[ORM\Column(typeTypes::TEXT)]
  83.     #[Groups(['read:sujet:item''read:forum:messsage:collection''post:forum:message:item'])]
  84.     private ?string $content null;
  85.     #[ORM\Column(nullabletrue)]
  86.     #[Groups(['read:sujet:item''like:message:forum:item''read:forum:messsage:collection'])]
  87.     private ?int $likes null;
  88.     #[ORM\Column(nullabletrue)]
  89.     #[Groups(['read:sujet:item''read:forum:messsage:collection'])]
  90.     private ?bool $isAnswer null;
  91.     #[ORM\ManyToOne(targetEntityself::class, inversedBy'forumMessages')]
  92.     private ?self $forumMessage null;
  93.     #[ORM\OneToMany(mappedBy'forumMessage'targetEntityself::class, cascade: ['persist''remove'])]
  94.     #[Groups(['read:sujet:item''read:forum:messsage:collection'])]
  95.     private Collection $forumMessages;
  96.     #[ORM\Column(nullabletrue)]
  97.     #[Groups(['read:sujet:item''read:forum:messsage:collection'])]
  98.     private ?bool $isResponse null;
  99.     #[ORM\OneToMany(mappedBy'forumMessage'targetEntityLikeMessageForum::class, orphanRemovaltrue)]
  100.     private Collection $likeMessageForums;
  101.     public function __construct()
  102.     {
  103.         $this->createdAt = new DateTimeImmutable();
  104.         $this->forumMessages = new ArrayCollection();
  105.         $this->createdAt = new \DateTimeImmutable();
  106.         $this->isAnswer false;
  107.         $this->likes 0;
  108.         $this->likeMessageForums = new ArrayCollection();
  109.     }
  110.     public function getId(): ?int
  111.     {
  112.         return $this->id;
  113.     }
  114.     public function getMembre(): ?Membre
  115.     {
  116.         return $this->membre;
  117.     }
  118.     public function setMembre(?Membre $membre): self
  119.     {
  120.         $this->membre $membre;
  121.         return $this;
  122.     }
  123.     public function getSujet(): ?Sujet
  124.     {
  125.         return $this->sujet;
  126.     }
  127.     public function setSujet(?Sujet $sujet): self
  128.     {
  129.         $this->sujet $sujet;
  130.         return $this;
  131.     }
  132.     public function getCreatedAt(): ?\DateTimeImmutable
  133.     {
  134.         return $this->createdAt;
  135.     }
  136.     public function setCreatedAt(\DateTimeImmutable $createdAt): self
  137.     {
  138.         $this->createdAt $createdAt;
  139.         return $this;
  140.     }
  141.     public function getContent(): ?string
  142.     {
  143.         return $this->content;
  144.     }
  145.     public function setContent(string $content): self
  146.     {
  147.         $this->content $content;
  148.         return $this;
  149.     }
  150.     public function getLikes(): ?int
  151.     {
  152.         return $this->likes;
  153.     }
  154.     public function setLikes(?int $likes): self
  155.     {
  156.         $this->likes $likes;
  157.         return $this;
  158.     }
  159.     public function isIsAnswer(): ?bool
  160.     {
  161.         return $this->isAnswer;
  162.     }
  163.     public function setIsAnswer(?bool $isAnswer): self
  164.     {
  165.         $this->isAnswer $isAnswer;
  166.         return $this;
  167.     }
  168.     public function getForumMessage(): ?self
  169.     {
  170.         return $this->forumMessage;
  171.     }
  172.     public function setForumMessage(?self $forumMessage): self
  173.     {
  174.         $this->forumMessage $forumMessage;
  175.         return $this;
  176.     }
  177.     /**
  178.      * @return Collection<int, self>
  179.      */
  180.     public function getForumMessages(): Collection
  181.     {
  182.         return $this->forumMessages;
  183.     }
  184.     public function addForumMessage(self $forumMessage): self
  185.     {
  186.         if (!$this->forumMessages->contains($forumMessage)) {
  187.             $this->forumMessages->add($forumMessage);
  188.             $forumMessage->setForumMessage($this);
  189.         }
  190.         return $this;
  191.     }
  192.     public function removeForumMessage(self $forumMessage): self
  193.     {
  194.         if ($this->forumMessages->removeElement($forumMessage)) {
  195.             // set the owning side to null (unless already changed)
  196.             if ($forumMessage->getForumMessage() === $this) {
  197.                 $forumMessage->setForumMessage(null);
  198.             }
  199.         }
  200.         return $this;
  201.     }
  202.     public function isIsResponse(): ?bool
  203.     {
  204.         return $this->isResponse;
  205.     }
  206.     public function setIsResponse(?bool $isResponse): self
  207.     {
  208.         $this->isResponse $isResponse;
  209.         return $this;
  210.     }
  211.     /**
  212.      * @return Collection<int, LikeMessageForum>
  213.      */
  214.     public function getLikeMessageForums(): Collection
  215.     {
  216.         return $this->likeMessageForums;
  217.     }
  218.     public function addLikeMessageForum(LikeMessageForum $likeMessageForum): static
  219.     {
  220.         if (!$this->likeMessageForums->contains($likeMessageForum)) {
  221.             $this->likeMessageForums->add($likeMessageForum);
  222.             $likeMessageForum->setForumMessage($this);
  223.         }
  224.         return $this;
  225.     }
  226.     public function removeLikeMessageForum(LikeMessageForum $likeMessageForum): static
  227.     {
  228.         if ($this->likeMessageForums->removeElement($likeMessageForum)) {
  229.             // set the owning side to null (unless already changed)
  230.             if ($likeMessageForum->getForumMessage() === $this) {
  231.                 $likeMessageForum->setForumMessage(null);
  232.             }
  233.         }
  234.         return $this;
  235.     }
  236. }