<?php
namespace App\Entity;
use ApiPlatform\Metadata\ApiFilter;
use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Doctrine\Orm\Filter\BooleanFilter;
use ApiPlatform\Doctrine\Orm\Filter\DateFilter;
use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Metadata\Put;
use ApiPlatform\Metadata\Post;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Delete;
use App\Controller\CreateMediaObjectAction;
use App\Controller\UpdateMediaObjectAction;
use App\Action\MediaAction;
use App\Repository\MediaObjectRepository;
use DateTime;
use DateTimeInterface;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
#[ApiResource(
security: "is_granted('ROLE_USER')",
types: [""],
normalizationContext: [
'groups' => 'media_object_read'
],
operations: [
new Get(),
new GetCollection(),
new Put(security: "is_granted('ROLE_USER')",),
new Patch(security: "is_granted('ROLE_USER')",),
new Delete(security: "is_granted('ROLE_USER')",),
new Post(
security: "is_granted('ROLE_USER')",
controller: CreateMediaObjectAction::class,
deserialize: false,
validationContext: [],
openapiContext: [
"requestBody" => [
"content" => [
"multipart/form-data" => [
"schema" => [
"type" => "object",
"properties" => [
"file" => [
"type" => "string",
"format" => "binary"
]
]
]
]
]
]
]
),
new Post(
security: "is_granted('ROLE_USER')",
name: "replace_image",
controller: UpdateMediaObjectAction::class,
deserialize: false,
uriTemplate: "/media_objects/{id}",
validationContext: ["Default", "media_object_update"],
openapiContext: [
"parameters" => [
[
"name" => "id",
"in" => "uriTemplate",
"type" => "string",
"required" => true,
]
],
"requestBody" => [
"content" => [
"multipart/form-data" => [
"schema" => [
"type" => "object",
"properties" => [
"file" => [
"type" => "string",
"format" => "binary"
]
]
]
]
]
]
]
),
new Post(
security: "is_granted('ROLE_USER')",
name: "get_size",
controller: MediaAction::class,
uriTemplate: "/media_objects/resize/{id}/{size}",
openapiContext: [
"parameters" => [
[
"name" => "User Login",
"in" => "body",
"required" => true,
"schema" => [
"type" => "object",
"required" => [
"email",
"password"
],
"properties" => [
"email" => ["type" => "string"],
"password" => ["type" => "string"]
]
]
]
]
]
),
],
)]
#[Vich\Uploadable]
#[GetCollection]
#[ApiFilter(OrderFilter::class)]
#[ApiFilter(DateFilter::class, properties: ["createdAt"])]
#[ApiFilter(SearchFilter::class, properties: ["id" => "exact", "filePath" => "partial"])]
#[ORM\Entity(repositoryClass: MediaObjectRepository::class)]
#[ORM\HasLifecycleCallbacks]
class MediaObject
{
/**
* @var int|null
*/
#[ORM\Column(type: \Doctrine\DBAL\Types\Types::INTEGER)]
#[ORM\GeneratedValue]
#[ORM\Id]
protected ?int $id = null;
/**
* @var string|null
*/
#[ApiProperty(types: ["https://schema.org/contentUrl"])]
#[Groups(['media_object_read', 'product:read'])]
public $contentUrl;
/**
* @var File|null
*
*/
#[Vich\UploadableField(mapping: "media_object", fileNameProperty: "filePath")]
#[Assert\NotNull(groups: ['media_object_create', 'media_object_update'])]
#[Groups(['product:read'])]
public $file;
/**
* @var string|null
*/
#[Groups(['media_object_read', 'product:read'])]
#[ORM\Column(nullable: true)]
public $filePath;
public function getId(): ?int
{
return $this->id;
}
public function getFilename(): ?string
{
return $this->filename;
}
public function setFilename(string $filename): self
{
$this->filename = $filename;
return $this;
}
public function getAlt(): ?string
{
return $this->alt;
}
public function setAlt(?string $alt): self
{
$this->alt = $alt;
return $this;
}
public function getFiletype(): ?string
{
return $this->filetype;
}
public function setFiletype(string $filetype): self
{
$this->filetype = $filetype;
return $this;
}
public function getFilesize(): ?int
{
return $this->filesize;
}
public function setFilesize(?int $filesize): self
{
$this->filesize = $filesize;
return $this;
}
public function getFilePath(): ?string
{
return $this->filePath;
}
public function setFilePath(?string $filePath): self
{
$this->filePath = $filePath;
return $this;
}
}