From b413934d352dcebb448e221b069586a5b9e52699 Mon Sep 17 00:00:00 2001 From: Alexey Skobkin Date: Thu, 17 Aug 2023 02:27:31 +0300 Subject: [PATCH] Introducing PostTypeEnum. --- src/DataFixtures/LoadPostData.php | 11 ++++++----- src/Entity/Blog/Post.php | 16 ++++++---------- src/Enum/Blog/PostTypeEnum.php | 10 ++++++++++ src/Factory/Blog/PostFactory.php | 3 ++- 4 files changed, 24 insertions(+), 16 deletions(-) create mode 100644 src/Enum/Blog/PostTypeEnum.php diff --git a/src/DataFixtures/LoadPostData.php b/src/DataFixtures/LoadPostData.php index 3e81241..3bf43e4 100644 --- a/src/DataFixtures/LoadPostData.php +++ b/src/DataFixtures/LoadPostData.php @@ -3,6 +3,7 @@ declare(strict_types=1); namespace App\DataFixtures; +use App\Enum\Blog\PostTypeEnum; use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Common\DataFixtures\OrderedFixtureInterface; use Doctrine\Persistence\ObjectManager; @@ -28,31 +29,31 @@ class LoadPostData extends Fixture implements OrderedFixtureInterface /** @var User $prWlUser */ $prWlUser = $this->getReference('test_user_'.LoadUserData::USER_PRWL_ID); - $longPost = (new Post(self::POST_ID_LONG, $mainUser, new \DateTime(), Post::TYPE_POST)) + $longPost = (new Post(self::POST_ID_LONG, $mainUser, new \DateTime(), PostTypeEnum::Post)) ->setText('Test post with many comments') ->setPrivate(false) ->setDeleted(false) ; - $shortPost = (new Post(self::POST_ID_SHORT, $mainUser, new \DateTime(), Post::TYPE_POST)) + $shortPost = (new Post(self::POST_ID_SHORT, $mainUser, new \DateTime(), PostTypeEnum::Post)) ->setText('Test short post') ->setPrivate(false) ->setDeleted(false) ; - $privateUserPost = (new Post(self::POST_ID_PR_USER, $privateUser, new \DateTime(), Post::TYPE_POST)) + $privateUserPost = (new Post(self::POST_ID_PR_USER, $privateUser, new \DateTime(), PostTypeEnum::Post)) ->setText('Post from private user. Should not be visible in the public feed.') ->setPrivate(false) ->setDeleted(false) ; - $wlUserPost = (new Post(self::POST_ID_WL_USER, $wlUser, new \DateTime(), Post::TYPE_POST)) + $wlUserPost = (new Post(self::POST_ID_WL_USER, $wlUser, new \DateTime(), PostTypeEnum::Post)) ->setText('Post from whitelist-only user. Should only be visible for whitelisted users.') ->setPrivate(false) ->setDeleted(false) ; - $privateWlUserPost = (new Post(self::POST_ID_PR_WL_USER, $prWlUser, new \DateTime(), Post::TYPE_POST)) + $privateWlUserPost = (new Post(self::POST_ID_PR_WL_USER, $prWlUser, new \DateTime(), PostTypeEnum::Post)) ->setText('Post from private AND whitelist-only user. Should not be visible in the public feed.') ->setPrivate(false) ->setDeleted(false) diff --git a/src/Entity/Blog/Post.php b/src/Entity/Blog/Post.php index b8f22b4..b1f8037 100644 --- a/src/Entity/Blog/Post.php +++ b/src/Entity/Blog/Post.php @@ -4,9 +4,9 @@ declare(strict_types=1); namespace App\Entity\Blog; use App\Entity\User; +use App\Enum\Blog\PostTypeEnum; use App\Repository\Blog\TagRepository; -use Doctrine\Common\Collections\ArrayCollection; -use Doctrine\Common\Collections\Collection; +use Doctrine\Common\Collections\{ArrayCollection, Collection}; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity(repositoryClass: TagRepository::class)] @@ -14,9 +14,6 @@ use Doctrine\ORM\Mapping as ORM; #[ORM\Table(name: 'tags', schema: 'posts')] class Post { - public const TYPE_POST = 'post'; - public const TYPE_FEED = 'feed'; - #[ORM\Id] #[ORM\Column(name: 'id', type: 'text')] private string $id; @@ -30,9 +27,8 @@ class Post #[ORM\Column(name: 'updated_at', type: 'datetime', nullable: true)] private ?\DateTime $updatedAt; - // TODO: Native Enum - #[ORM\Column(name: 'type', type: 'string', length: 6)] - private string $type = self::TYPE_POST; + #[ORM\Column(name: 'type', type: 'string', length: 6, enumType: PostTypeEnum::class)] + private PostTypeEnum $type; #[ORM\Column(name: 'private', type: 'boolean', nullable: true)] private bool $private; @@ -60,7 +56,7 @@ class Post private Collection $comments; - public function __construct(string $id, User $author, \DateTime $createdAt, string $type) + public function __construct(string $id, User $author, \DateTime $createdAt, PostTypeEnum $type) { $this->id = $id; $this->author = $author; @@ -105,7 +101,7 @@ class Post return $this->updatedAt; } - public function getType(): string + public function getType(): PostTypeEnum { return $this->type; } diff --git a/src/Enum/Blog/PostTypeEnum.php b/src/Enum/Blog/PostTypeEnum.php new file mode 100644 index 0000000..404752b --- /dev/null +++ b/src/Enum/Blog/PostTypeEnum.php @@ -0,0 +1,10 @@ +getId(), $author, new \DateTime($postData->getCreated()), - $postData->getType() ?: Post::TYPE_POST + PostTypeEnum::tryFrom($postData->getType()) ?? PostTypeEnum::Post, ); $this->postRepository->save($post); }