Introducing PostTypeEnum.

This commit is contained in:
Alexey Skobkin 2023-08-17 02:27:31 +03:00
parent 042d119cea
commit b413934d35
No known key found for this signature in database
GPG Key ID: 5D5CEF6F221278E7
4 changed files with 24 additions and 16 deletions

View File

@ -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)

View File

@ -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;
}

View File

@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace App\Enum\Blog;
enum PostTypeEnum: string
{
case Post = 'post';
case Feed = 'feed';
}

View File

@ -3,6 +3,7 @@ declare(strict_types=1);
namespace App\Factory\Blog;
use App\Enum\Blog\PostTypeEnum;
use App\Factory\AbstractFactory;
use App\Factory\UserFactory;
use Doctrine\ORM\EntityManagerInterface;
@ -117,7 +118,7 @@ class PostFactory extends AbstractFactory
$postData->getId(),
$author,
new \DateTime($postData->getCreated()),
$postData->getType() ?: Post::TYPE_POST
PostTypeEnum::tryFrom($postData->getType()) ?? PostTypeEnum::Post,
);
$this->postRepository->save($post);
}