diff --git a/src/Entity/Api/Podcast.php b/src/Entity/Api/Podcast.php index 9a11eb058..9d7eb2a5b 100644 --- a/src/Entity/Api/Podcast.php +++ b/src/Entity/Api/Podcast.php @@ -42,6 +42,13 @@ final class Podcast #[OA\Property] public string $description_short; + #[OA\Property( + description: "An array containing podcast-specific branding configuration", + type: "array", + items: new OA\Items() + )] + public array $branding_config; + #[OA\Property] public string $language; diff --git a/src/Entity/Api/PodcastEpisode.php b/src/Entity/Api/PodcastEpisode.php index 173a50d3a..4207a700d 100644 --- a/src/Entity/Api/PodcastEpisode.php +++ b/src/Entity/Api/PodcastEpisode.php @@ -33,6 +33,12 @@ final class PodcastEpisode #[OA\Property] public bool $explicit = false; + #[OA\Property] + public ?int $season_number = null; + + #[OA\Property] + public ?int $episode_number = null; + #[OA\Property] public int $created_at; diff --git a/src/Entity/ApiGenerator/PodcastApiGenerator.php b/src/Entity/ApiGenerator/PodcastApiGenerator.php index 6643eb322..8ded89a40 100644 --- a/src/Entity/ApiGenerator/PodcastApiGenerator.php +++ b/src/Entity/ApiGenerator/PodcastApiGenerator.php @@ -48,6 +48,8 @@ final class PodcastApiGenerator $return->description = $record->getDescription(); $return->description_short = Strings::truncateText($return->description, 200); + $return->branding_config = $record->getBrandingConfig()->toArray(); + $return->language = $record->getLanguage(); try { $locale = $request->getCustomization()->getLocale(); diff --git a/src/Entity/ApiGenerator/PodcastEpisodeApiGenerator.php b/src/Entity/ApiGenerator/PodcastEpisodeApiGenerator.php index f18ec2933..bbefd4599 100644 --- a/src/Entity/ApiGenerator/PodcastEpisodeApiGenerator.php +++ b/src/Entity/ApiGenerator/PodcastEpisodeApiGenerator.php @@ -41,6 +41,9 @@ final class PodcastEpisodeApiGenerator $return->description_short = Strings::truncateText($return->description, 100); $return->explicit = $record->getExplicit(); + $return->season_number = $record->getSeasonNumber(); + $return->episode_number = $record->getEpisodeNumber(); + $return->created_at = $record->getCreatedAt(); $return->publish_at = $record->getPublishAt(); diff --git a/src/Entity/Migration/Version20240421094525.php b/src/Entity/Migration/Version20240421094525.php new file mode 100644 index 000000000..c76adfbc9 --- /dev/null +++ b/src/Entity/Migration/Version20240421094525.php @@ -0,0 +1,28 @@ +addSql('ALTER TABLE podcast ADD branding_config JSON DEFAULT NULL'); + $this->addSql('ALTER TABLE podcast_episode ADD season_number INT NOT NULL, ADD episode_number INT NOT NULL'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE podcast DROP branding_config'); + $this->addSql('ALTER TABLE podcast_episode DROP season_number, DROP episode_number'); + } + +} diff --git a/src/Entity/Podcast.php b/src/Entity/Podcast.php index 7c1b40e81..759db2de0 100644 --- a/src/Entity/Podcast.php +++ b/src/Entity/Podcast.php @@ -52,6 +52,9 @@ class Podcast implements Interfaces\IdentifiableEntityInterface #[Assert\NotBlank] protected string $description; + #[ORM\Column(type: 'json', nullable: true)] + protected ?array $branding_config = null; + #[ORM\Column(length: 2)] #[Assert\NotBlank] protected string $language; @@ -147,6 +150,24 @@ class Podcast implements Interfaces\IdentifiableEntityInterface return $this; } + public function getBrandingConfig(): PodcastBrandingConfiguration + { + return new PodcastBrandingConfiguration((array)$this->branding_config); + } + + public function setBrandingConfig( + PodcastBrandingConfiguration|array $brandingConfig, + bool $forceOverwrite = false + ): void { + if (is_array($brandingConfig)) { + $brandingConfig = new PodcastBrandingConfiguration( + $forceOverwrite ? $brandingConfig : array_merge((array)$this->branding_config, $brandingConfig) + ); + } + + $this->branding_config = $brandingConfig->toArray(); + } + public function getLanguage(): string { return $this->language; diff --git a/src/Entity/PodcastBrandingConfiguration.php b/src/Entity/PodcastBrandingConfiguration.php new file mode 100644 index 000000000..a2ca7d177 --- /dev/null +++ b/src/Entity/PodcastBrandingConfiguration.php @@ -0,0 +1,10 @@ +season_number; + } + + public function setSeasonNumber(?int $season_number): self + { + $this->season_number = $season_number; + + return $this; + } + + public function getEpisodeNumber(): ?int + { + return $this->episode_number; + } + + public function setEpisodeNumber(?int $episode_number): self + { + $this->episode_number = $episode_number; + + return $this; + } + public function getCreatedAt(): int { return $this->created_at;