From e59b1ea2d12ad86aeae37a385f02033997490b42 Mon Sep 17 00:00:00 2001
From: Dave Smith-Hayes <me@davesmithhayes.com>
Date: Wed, 16 Apr 2025 22:11:12 -0400
Subject: [PATCH] Add episode factory.

---
 app/src/Domain/Entity/Episode.php         |  2 ++
 app/src/Domain/Factory/EpisodeFactory.php | 42 +++++++++++++++++++++++
 2 files changed, 44 insertions(+)
 create mode 100644 app/src/Domain/Factory/EpisodeFactory.php

diff --git a/app/src/Domain/Entity/Episode.php b/app/src/Domain/Entity/Episode.php
index 9021224..e49e9c6 100644
--- a/app/src/Domain/Entity/Episode.php
+++ b/app/src/Domain/Entity/Episode.php
@@ -4,10 +4,12 @@ namespace Slovocast\Domain\Entity;
 
 use DateTimeImmutable;
 use Slovocast\Domain\Entity as EntityTrait;
+use Slovocast\Domain\Record as RecordTrait;
 
 class Episode
 {
     use EntityTrait;
+    use RecordTrait;
 
     private string $duration;
 
diff --git a/app/src/Domain/Factory/EpisodeFactory.php b/app/src/Domain/Factory/EpisodeFactory.php
new file mode 100644
index 0000000..91627a7
--- /dev/null
+++ b/app/src/Domain/Factory/EpisodeFactory.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Slovocast\Domain\Factory;
+
+use Slovocast\Domain\Entity\Episode;
+use Slovocast\Domain\FactoryInterface;
+
+class EpisodeFactory implements FactoryInterface
+{
+    public static function fromArray(array $props): Episode
+    {
+        $episode = new Episode(
+            $props['title'],
+            $props['link'],
+            (int) $props['length'],
+            $props['description'],
+            $props['serialNumber'],
+            (bool) $props['explicit'],
+            $props['publishedDate'],
+            $props['episodeType']
+        );
+
+        if ($props['id']) {
+            $episode->setId($props['id']);
+        }
+
+        if ($props['created_at']) {
+            $episode->setCreatedAt($props['createdAt']);
+        }
+
+        if ($props['updated_id']) {
+            $episode->setUpdatedAt($props['updatedAt']);
+        }
+
+        return $episode;
+    }
+
+    public static function toArray(Episode $episode): array
+    {
+        return [];
+    }
+}