src/Entity/MediaObject.php line 69

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use ApiPlatform\Metadata\ApiProperty;
  4. use ApiPlatform\Metadata\ApiResource;
  5. use ApiPlatform\Metadata\Get;
  6. use ApiPlatform\Metadata\GetCollection;
  7. use ApiPlatform\Metadata\Post;
  8. use ApiPlatform\Metadata\Delete;
  9. use App\Controller\CreateMediaObjectAction;
  10. use Doctrine\Common\Collections\ArrayCollection;
  11. use Doctrine\Common\Collections\Collection;
  12. use Doctrine\ORM\Mapping as ORM;
  13. use Symfony\Component\HttpFoundation\File\File;
  14. use Symfony\Component\Serializer\Annotation\Groups;
  15. use Symfony\Component\Validator\Constraints as Assert;
  16. use Vich\UploaderBundle\Mapping\Annotation as Vich;
  17. use ApiPlatform\Metadata\ApiFilter;
  18. use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
  19. use Doctrine\DBAL\Types\Types;
  20. use Symfony\Component\Serializer\Annotation\MaxDepth;
  21. use ApiPlatform\Doctrine\Orm\Filter\DateFilter;
  22. #[Vich\Uploadable]
  23. #[ORM\Entity]
  24. #[ApiResource(
  25.     normalizationContext: ['groups' => ['media_object:read']], 
  26.     types: ['https://schema.org/MediaObject'],
  27.     operations: [
  28.         new Get(),
  29.         new GetCollection(),
  30.         new Delete(),
  31.         new Post(
  32.             controllerCreateMediaObjectAction::class, 
  33.             deserializefalse
  34.             validationContext: ['groups' => ['Default''media_object_create']], 
  35.             openapiContext: [
  36.                 'requestBody' => [
  37.                     'content' => [
  38.                         'multipart/form-data' => [
  39.                             'schema' => [
  40.                                 'type' => 'object'
  41.                                 'properties' => [
  42.                                     'file' => [
  43.                                         'type' => 'string'
  44.                                         'format' => 'binary'
  45.                                     ]
  46.                                 ]
  47.                             ]
  48.                         ]
  49.                     ]
  50.                 ]
  51.             ]
  52.         )
  53.     ],
  54.     order: ['id' => 'DESC'],
  55. )]
  56. #[ApiFilter(DateFilter::class, properties: ['uploadTimestamp'])]
  57. #[ORM\HasLifecycleCallbacks]
  58. class MediaObject
  59. {
  60.     #[Groups(['media_object:read''PwAccident:read'])]
  61.     #[ORM\IdORM\ColumnORM\GeneratedValue]
  62.     private ?int $id null;
  63.     #[ApiProperty(types: ['https://schema.org/contentUrl'])]
  64.     #[Groups(['media_object:read''PwAccident:read'])]
  65.     public ?string $contentUrl null;
  66.     
  67.     #[Vich\UploadableField(mapping"media_object"fileNameProperty"filePath")]
  68.     #[Assert\NotNull(groups: ['media_object_create'])]
  69.     public ?File $file null;
  70.     #[Groups(['media_object:read''PwAccident:read'])]
  71.     #[ORM\Column(typeTypes::DATETIME_MUTABLEnullabletrue)]
  72.     public $uploadTimestamp;
  73.     #[ORM\Column(nullabletrue)] 
  74.     #[Groups(['media_object:read''PwAccident:read'])]
  75.     public ?string $filePath null;
  76.     public function getId(): ?int
  77.     
  78.         return $this->id;
  79.     }
  80.     public function getUploadTimestamp(): ?\DateTimeInterface
  81.     {
  82.         return $this->uploadTimestamp;
  83.     }
  84.    
  85.     
  86.  
  87.     #[ORM\PrePersist]
  88.     public function setCreatedAtValue(): void
  89.     {
  90.         $this->uploadTimestamp = new \DateTime(); 
  91.     }
  92.    
  93.    
  94. }