['post:collection:read', 'post:read']], )] #[GetCollection(normalizationContext: ['groups' => ['post:collection:read']])] #[Metadata\ApiFilter(filterClass: SearchFilter::class, properties: ['species' => 'exact'])] #[Vich\Uploadable] class Post { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] #[Groups(['post:collection:read'])] private ?int $id = null; #[ORM\Column] #[Groups(['post:collection:read'])] #[Assert\NotBlank] private ?\DateTimeImmutable $foundDate = null; #[ORM\Column] #[ApiProperty(writable: false)] #[Groups(['post:collection:read'])] private ?\DateTimeImmutable $publicationDate = null; #[ORM\Column] private ?\DateTimeImmutable $updatedAt = null; #[ORM\Column(nullable: true)] #[Groups(['post:collection:read'])] private ?float $latitude = null; #[ORM\Column(nullable: true)] #[Groups(['post:collection:read'])] private ?float $longitude = null; #[ORM\Column(nullable: true)] #[Groups(['post:collection:read'])] private ?float $altitude = null; #[ORM\Column(length: 255, nullable: true)] private ?string $image = null; #[Vich\UploadableField(mapping: 'posts', fileNameProperty: 'image')] #[Assert\Image] #[ImageSafety] private ?File $imageFile = null; #[ORM\Column(type: Types::TEXT)] #[Groups(['post:read'])] #[Assert\NotBlank] private ?string $commentary = null; #[ORM\ManyToOne(inversedBy: 'posts')] #[ApiProperty(readableLink: false)] #[Groups(['post:collection:read'])] private ?Species $species = null; /** * @var Collection */ #[ORM\OneToMany(targetEntity: Comment::class, mappedBy: 'related_post', fetch: 'EXTRA_LAZY')] private Collection $comments; /** * @var Collection */ #[ORM\ManyToMany(targetEntity: User::class, inversedBy: 'liked_post')] private Collection $likes; public function __construct() { $this->comments = new ArrayCollection(); $this->likes = new ArrayCollection(); } public function getId(): ?int { return $this->id; } public function getFoundDate(): ?\DateTimeImmutable { return $this->foundDate; } public function setFoundDate(\DateTimeImmutable $foundDate): static { $this->foundDate = $foundDate; return $this; } public function getPublicationDate(): ?\DateTimeImmutable { return $this->publicationDate; } public function setPublicationDate(\DateTimeImmutable $publicationDate): static { $this->publicationDate = $publicationDate; return $this; } public function getUpdatedAt(): ?\DateTimeImmutable { return $this->updatedAt; } public function setUpdatedAt(\DateTimeImmutable $updatedAt): static { $this->updatedAt = $updatedAt; return $this; } public function getLatitude(): ?float { return $this->latitude; } public function setLatitude(?float $latitude): static { $this->latitude = $latitude; return $this; } public function getLongitude(): ?float { return $this->longitude; } public function setLongitude(?float $longitude): static { $this->longitude = $longitude; return $this; } public function getAltitude(): ?float { return $this->altitude; } public function setAltitude(?float $altitude): static { $this->altitude = $altitude; return $this; } public function getImage(): ?string { return $this->image; } public function setImage(?string $image): static { $this->image = $image; return $this; } public function getImageFile(): ?File { return $this->imageFile; } public function setImageFile(?File $imageFile): static { $this->imageFile = $imageFile; if ($imageFile !== null) { $this->updatedAt = new \DateTimeImmutable(); } return $this; } public function getCommentary(): ?string { return $this->commentary; } public function setCommentary(string $commentary): static { $this->commentary = $commentary; return $this; } public function getSpecies(): ?Species { return $this->species; } public function setSpecies(?Species $species): static { $this->species = $species; return $this; } #[ORM\PrePersist] #[ORM\PreUpdate] public function setPublicationDateValue(): void { if ($this->publicationDate === null) { $this->publicationDate = new \DateTimeImmutable(); } $this->updatedAt = new \DateTimeImmutable(); } /** * @return Collection */ public function getComments(): Collection { return $this->comments; } public function addComment(Comment $comment): static { if (!$this->comments->contains($comment)) { $this->comments->add($comment); $comment->setRelatedPost($this); } return $this; } public function removeComment(Comment $comment): static { if ($this->comments->removeElement($comment)) { // set the owning side to null (unless already changed) if ($comment->getRelatedPost() === $this) { $comment->setRelatedPost(null); } } return $this; } /** * @return Collection */ public function getLikes(): Collection { return $this->likes; } public function addLike(User $user): static { if (!$this->likes->contains($user)) { $this->likes->add($user); } return $this; } public function removeLike(User $user): static { $this->likes->removeElement($user); return $this; } }