src/Entity/ProtectedMedia.php line 69
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File,
Symfony\Component\Validator\Constraint,
Symfony\Component\Validator\Constraints as Assert;
use ApiPlatform\Metadata\ApiResource,
ApiPlatform\Metadata\Get,
ApiPlatform\Metadata\Post;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
use App\Repository\ProtectedMediaRepository;
use App\Controller\CreateProtectedMediaAction,
App\DTO\CloneDTO,
App\StateProcessor\CloneProcessor,
App\Security\Voter\CloneVoter,
App\Lib\Actions;
use App\Controller\GetProtectedMediaFileAction;
#[ApiResource(
normalizationContext: ['groups' => ['read', 'read:' . self::class]],
operations: [
new Get(
name: 'get_protected_media_file',
uriTemplate: 'protected_media/{uuid}/file',
controller: GetProtectedMediaFileAction::class,
),
new Get(),
new Post(
uriTemplate: '/protected_media/clone',
input: CloneDTO::class,
processor: CloneProcessor::class,
security: 'is_granted("' . Actions::CLONE .'")',
securityMessage: CloneVoter::MESSAGE
),
new Post(
controller: CreateProtectedMediaAction::class,
deserialize: false,
validationContext: ['groups' => [Constraint::DEFAULT_GROUP, 'post']],
openapiContext: [
'requestBody' => [
'content' => [
'multipart/form-data' => [
'schema' => [
'type' => 'object',
'properties' => [
'file' => [
'type' => 'string',
'format' => 'binary'
]
]
]
]
]
]
]
)
],
extraProperties: ['standard_put' => false],
)]
#[Vich\Uploadable]
#[ORM\Entity(repositoryClass: ProtectedMediaRepository::class)]
class ProtectedMedia extends AbstractMedia
{
#[Vich\UploadableField(mapping: 'protected_files', fileNameProperty: 'filePath')]
#[Assert\NotNull(groups: ['post'])]
#[Assert\File(
maxSize: '128M',
mimeTypes: [
'image/*',
'video/*',
'audio/*',
'font/*',
'text/*',
'application/pdf',
'application/zip',
'application/vnd.rar',
'application/gzip',
'application/epub+zip',
'application/vnd.ms-excel',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'application/vnd.ms-powerpoint',
'application/vnd.oasis.opendocument.spreadsheet',
'application/msword',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
]
)]
protected ?File $file = null;
}