AzuraCast/src/Entity/Podcast.php

180 lines
4.0 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
#[
ORM\Entity,
ORM\Table(name: 'podcast'),
Attributes\Auditable
]
class Podcast implements Interfaces\IdentifiableEntityInterface
{
use Traits\HasUniqueId;
use Traits\TruncateStrings;
public const DIR_PODCAST_ARTWORK = '.podcast_art';
#[ORM\ManyToOne(targetEntity: StorageLocation::class)]
#[ORM\JoinColumn(name: 'storage_location_id', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')]
protected StorageLocation $storage_location;
#[ORM\Column(length: 255)]
#[Assert\NotBlank]
protected string $title;
#[ORM\Column(length: 255, nullable: true)]
protected ?string $link = null;
#[ORM\Column(type: 'text')]
#[Assert\NotBlank]
protected string $description;
#[ORM\Column(length: 2)]
#[Assert\NotBlank]
protected string $language;
#[ORM\Column(length: 255)]
protected string $author;
#[ORM\Column(length: 255)]
#[Assert\Email]
protected string $email;
#[ORM\Column]
#[Attributes\AuditIgnore]
protected int $art_updated_at = 0;
/** @var Collection<int, PodcastCategory> */
#[ORM\OneToMany(mappedBy: 'podcast', targetEntity: PodcastCategory::class)]
protected Collection $categories;
/** @var Collection<int, PodcastEpisode> */
#[ORM\OneToMany(mappedBy: 'podcast', targetEntity: PodcastEpisode::class)]
protected Collection $episodes;
public function __construct(StorageLocation $storageLocation)
{
$this->storage_location = $storageLocation;
$this->categories = new ArrayCollection();
$this->episodes = new ArrayCollection();
}
public function getStorageLocation(): StorageLocation
{
return $this->storage_location;
}
public function getTitle(): string
{
return $this->title;
}
public function setTitle(string $title): self
{
$this->title = $this->truncateString($title);
return $this;
}
public function getLink(): ?string
{
return $this->link;
}
public function setLink(?string $link): self
{
$this->link = $this->truncateNullableString($link);
return $this;
}
public function getDescription(): string
{
return $this->description;
}
public function setDescription(string $description): self
{
$this->description = $this->truncateString($description, 4000);
return $this;
}
public function getLanguage(): string
{
return $this->language;
}
public function setLanguage(string $language): self
{
$this->language = $this->truncateString($language);
return $this;
}
public function getAuthor(): string
{
return $this->author;
}
public function setAuthor(string $author): self
{
$this->author = $this->truncateString($author);
return $this;
}
public function getEmail(): string
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = $this->truncateString($email);
return $this;
}
public function getArtUpdatedAt(): int
{
return $this->art_updated_at;
}
public function setArtUpdatedAt(int $art_updated_at): self
{
$this->art_updated_at = $art_updated_at;
return $this;
}
/**
* @return Collection<int, PodcastCategory>
*/
public function getCategories(): Collection
{
return $this->categories;
}
/**
* @return Collection<int, PodcastEpisode>
*/
public function getEpisodes(): Collection
{
return $this->episodes;
}
public static function getArtPath(string $uniqueId): string
{
return self::DIR_PODCAST_ARTWORK . '/' . $uniqueId . '.jpg';
}
}