<?php
namespace App\Entity\Common;
use App\Entity\Account\User;
use App\Entity\Channel\Export\FileExport;
use App\Entity\Channel\FileOrganization;
use App\Entity\Channel\PositioningTest\FileQuestion;
use App\Entity\ChannelUserData\AdminChannelUserData\AdminDriveFile;
use App\Entity\ChannelUserData\AdminChannelUserData\Document\AdminChannelUserDataAgreement;
use App\Entity\ChannelUserData\AdminChannelUserData\Document\AdminChannelUserDataCertificate;
use App\Entity\ChannelUserData\AdminChannelUserData\Document\AdminChannelUserDataDocument;
use App\Entity\ChannelUserData\Cursus\FileAbstractCursus;
use App\Repository\Common\FileRepository;
use Doctrine\ORM\Mapping as ORM;
use DrosalysWeb\ObjectExtensions\Blame\Model\BlameInterface;
use DrosalysWeb\ObjectExtensions\Blame\Model\BlameTrait;
use DrosalysWeb\ObjectExtensions\Timestamp\Model\TimestampInterface;
use DrosalysWeb\ObjectExtensions\Timestamp\Model\TimestampTrait;
use Nellapp\Bundle\SDKBundle\Uploader\Model\NellappFileInterface;
use Symfony\Component\Serializer\Annotation as Serial;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
#[
ORM\Entity(repositoryClass: FileRepository::class),
ORM\InheritanceType('JOINED'),
ORM\DiscriminatorColumn(name: 'dtype', type: 'string'),
ORM\DiscriminatorMap([
'cursus-file' => FileAbstractCursus::class,
'organization-file' => FileOrganization::class,
'positioning-test-question-file' => FileQuestion::class,
'export-file' => FileExport::class,
'admin-drive-file' => AdminDriveFile::class,
'admin-document-file' => AdminChannelUserDataDocument::class,
'admin-agreement-file' => AdminChannelUserDataAgreement::class,
'admin-certificate-file' => AdminChannelUserDataCertificate::class,
]),
]
abstract class File implements BlameInterface, TimestampInterface, NellappFileInterface
{
use BlameTrait;
use TimestampTrait;
#[Serial\Groups(['Manager'])]
#[ORM\ManyToOne(targetEntity: User::class)]
#[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]
protected $createdBy = null;
#[Serial\Groups(['Manager'])]
#[ORM\ManyToOne(targetEntity: User::class)]
#[ORM\JoinColumn(nullable: true, onDelete: 'SET NULL')]
protected $updatedBy = null;
#[Serial\Groups(['Manager'])]
protected $createdAt = null;
#[Serial\Groups(['Manager'])]
protected $updatedAt = null;
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
#[Serial\Groups(['Manager'])]
private ?int $id = null;
#[Serial\Groups(['PostFile', 'PutFile'])]
private bool $pendingCopy = false;
#[ORM\Column(type: 'string', nullable: false)]
#[
NotBlank(groups: ['PostFile', 'PutFile']),
Length(max: 255, groups: ['PostFile', 'PutFile'])
]
#[Serial\Groups(['PostFile', 'PutFile', 'Manager'])]
private ?string $originalFilename = null;
#[ORM\Column(type: 'string', nullable: false)]
#[Serial\Groups(['PostFile', 'PutFile'])]
private ?string $path = null;
#[ORM\Column(type: 'string', nullable: false)]
#[NotBlank(groups: ['PostFile'])]
#[Serial\Groups(['PostFile'])]
private ?string $filename = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Serial\Groups(['PostFile', 'PutFile', 'Manager'])]
private ?string $ext = null;
#[ORM\Column(type: 'string', nullable: true)]
#[Serial\Groups(['PostFile', 'PutFile', 'Manager'])]
private ?string $mimeType = null;
#[ORM\Column(type: 'integer', nullable: true)]
#[Serial\Groups(['PostFile', 'PutFile', 'Manager'])]
private ?int $size = null;
public function getOriginalFilenameWithoutExtension(): string
{
return $this->getOriginalFilename();
}
public function getId(): ?int
{
return $this->id;
}
public function isPendingCopy(): bool
{
return $this->pendingCopy;
}
public function setPendingCopy(bool $pendingCopy): static
{
$this->pendingCopy = $pendingCopy;
return $this;
}
public function getOriginalFilename(): ?string
{
return $this->originalFilename;
}
public function setOriginalFilename(?string $originalFilename): static
{
$this->originalFilename = $originalFilename;
return $this;
}
public function getPath(): ?string
{
return $this->path;
}
public function setPath(?string $path): static
{
$this->path = $path;
return $this;
}
public function getFilename(): ?string
{
return $this->filename;
}
public function setFilename(?string $filename): static
{
$this->filename = $filename;
return $this;
}
public function getExt(): ?string
{
return $this->ext;
}
public function setExt(?string $ext): static
{
$this->ext = $ext;
return $this;
}
public function getMimeType(): ?string
{
return $this->mimeType;
}
public function setMimeType(?string $mimeType): static
{
$this->mimeType = $mimeType;
return $this;
}
public function getSize(): ?int
{
return $this->size;
}
public function setSize(?int $size): static
{
$this->size = $size;
return $this;
}
}