WIP: Symfony 6 project remake #2
|
@ -1,230 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace src\PointToolsBundle\Entity;
|
||||
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use src\PointToolsBundle\Entity\Subscription;
|
||||
use src\PointToolsBundle\Entity\SubscriptionEvent;
|
||||
|
||||
/**
|
||||
* @ORM\Table(name="users", schema="users", indexes={
|
||||
* @ORM\Index(name="idx_user_public", columns={"public"}),
|
||||
* @ORM\Index(name="idx_user_removed", columns={"is_removed"})
|
||||
* })
|
||||
* @ORM\Entity(repositoryClass="Skobkin\Bundle\PointToolsBundle\Repository\UserRepository")
|
||||
* @ORM\HasLifecycleCallbacks
|
||||
*/
|
||||
class User
|
||||
{
|
||||
public const AVATAR_SIZE_SMALL = '24';
|
||||
public const AVATAR_SIZE_MEDIUM = '40';
|
||||
public const AVATAR_SIZE_LARGE = '80';
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*
|
||||
* @ORM\Column(name="id", type="integer")
|
||||
* @ORM\Id
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="login", type="string", length=255, nullable=false)
|
||||
*/
|
||||
private $login;
|
||||
|
||||
/**
|
||||
* @var string|null
|
||||
*
|
||||
* @ORM\Column(name="name", type="string", length=255, nullable=true)
|
||||
*/
|
||||
private $name;
|
||||
|
||||
/**
|
||||
* @var \DateTime
|
||||
*
|
||||
* @ORM\Column(name="created_at", type="datetime")
|
||||
*/
|
||||
private $createdAt;
|
||||
|
||||
/**
|
||||
* @var \DateTime
|
||||
*
|
||||
* @ORM\Column(name="updated_at", type="datetime", nullable=true)
|
||||
*/
|
||||
private $updatedAt;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*
|
||||
* @ORM\Column(name="public", type="boolean", nullable=false, options={"default": false})
|
||||
*/
|
||||
private $public = false;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*
|
||||
* @ORM\Column(name="whitelist_only", type="boolean", nullable=false, options={"default": false})
|
||||
*/
|
||||
private $whitelistOnly = false;
|
||||
|
||||
/**
|
||||
* @var ArrayCollection|Subscription[]
|
||||
*
|
||||
* @ORM\OneToMany(targetEntity="Subscription", mappedBy="author", fetch="EXTRA_LAZY")
|
||||
*/
|
||||
private $subscribers;
|
||||
|
||||
/**
|
||||
* @var ArrayCollection|Subscription[]
|
||||
*
|
||||
* @ORM\OneToMany(targetEntity="Subscription", mappedBy="subscriber", fetch="EXTRA_LAZY")
|
||||
*/
|
||||
private $subscriptions;
|
||||
|
||||
/**
|
||||
* @var ArrayCollection|SubscriptionEvent[]
|
||||
*
|
||||
* @ORM\OneToMany(targetEntity="SubscriptionEvent", mappedBy="author", fetch="EXTRA_LAZY")
|
||||
*/
|
||||
private $newSubscriberEvents;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*
|
||||
* @ORM\Column(name="is_removed", type="boolean", options={"default": false})
|
||||
*/
|
||||
private $removed = false;
|
||||
|
||||
|
||||
public function __construct(int $id, \DateTime $createdAt = null, string $login = null, string $name = null)
|
||||
{
|
||||
$this->id = $id;
|
||||
$this->login = $login;
|
||||
$this->name = $name;
|
||||
$this->createdAt = $createdAt ?: new \DateTime();
|
||||
|
||||
$this->subscribers = new ArrayCollection();
|
||||
$this->subscriptions = new ArrayCollection();
|
||||
$this->newSubscriberEvents = new ArrayCollection();
|
||||
}
|
||||
|
||||
/**
|
||||
* @ORM\PreUpdate
|
||||
*/
|
||||
public function preUpdate(): void
|
||||
{
|
||||
$this->updatedAt = new \DateTime();
|
||||
}
|
||||
|
||||
public function getId(): int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
|
||||
public function getLogin(): string
|
||||
{
|
||||
return $this->login;
|
||||
}
|
||||
|
||||
public function getName(): ?string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
public function updateLoginAndName(string $login, ?string $name): self
|
||||
{
|
||||
$this->login = $login;
|
||||
$this->name = $name;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function addSubscriber(Subscription $subscribers): self
|
||||
{
|
||||
$this->subscribers[] = $subscribers;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function removeSubscriber(Subscription $subscribers)
|
||||
{
|
||||
$this->subscribers->removeElement($subscribers);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Subscription[]|ArrayCollection
|
||||
*/
|
||||
public function getSubscribers(): iterable
|
||||
{
|
||||
return $this->subscribers;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Subscription[]|ArrayCollection
|
||||
*/
|
||||
public function getSubscriptions(): iterable
|
||||
{
|
||||
return $this->subscriptions;
|
||||
}
|
||||
|
||||
public function addNewSubscriberEvent(SubscriptionEvent $newSubscriberEvents): self
|
||||
{
|
||||
$this->newSubscriberEvents[] = $newSubscriberEvents;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return SubscriptionEvent[]|ArrayCollection
|
||||
*/
|
||||
public function getNewSubscriberEvents(): iterable
|
||||
{
|
||||
return $this->newSubscriberEvents;
|
||||
}
|
||||
|
||||
public function getCreatedAt(): \DateTime
|
||||
{
|
||||
return $this->createdAt;
|
||||
}
|
||||
|
||||
public function getUpdatedAt(): ?\DateTime
|
||||
{
|
||||
return $this->updatedAt;
|
||||
}
|
||||
|
||||
public function updatePrivacy(?bool $public, ?bool $whitelistOnly): void
|
||||
{
|
||||
$this->public = $public;
|
||||
$this->whitelistOnly = $whitelistOnly;
|
||||
}
|
||||
|
||||
public function isPublic(): ?bool
|
||||
{
|
||||
return $this->public;
|
||||
}
|
||||
|
||||
public function isWhitelistOnly(): ?bool
|
||||
{
|
||||
return $this->whitelistOnly;
|
||||
}
|
||||
|
||||
public function isRemoved(): bool
|
||||
{
|
||||
return $this->removed;
|
||||
}
|
||||
|
||||
public function markAsRemoved(): void
|
||||
{
|
||||
$this->removed = true;
|
||||
}
|
||||
|
||||
public function restore(): void
|
||||
{
|
||||
$this->removed = false;
|
||||
}
|
||||
}
|
178
src/Entity/User.php
Normal file
178
src/Entity/User.php
Normal file
|
@ -0,0 +1,178 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
use App\Repository\UserRepository;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Entity(repositoryClass: UserRepository::class)]
|
||||
#[ORM\Table(name: 'users', schema: 'users')]
|
||||
#[ORM\Index(columns: ['public'], name: 'idx_user_public')]
|
||||
#[ORM\Index(columns: ['is_removed'], name: 'idx_user_removed')]
|
||||
#[ORM\HasLifecycleCallbacks]
|
||||
class User
|
||||
{
|
||||
public const AVATAR_SIZE_SMALL = '24';
|
||||
public const AVATAR_SIZE_MEDIUM = '40';
|
||||
public const AVATAR_SIZE_LARGE = '80';
|
||||
|
||||
#[ORM\Id]
|
||||
#[ORM\Column(name: 'id', type: 'integer')]
|
||||
private ?int $id = null;
|
||||
|
||||
#[ORM\Column(name: 'login', type: 'string', length: 255, nullable: false)]
|
||||
private string $login;
|
||||
|
||||
#[ORM\Column(name: 'name', type: 'string', length: 255, nullable: true)]
|
||||
private ?string $name;
|
||||
|
||||
#[ORM\Column(name: 'created_at', type: 'datetime')]
|
||||
private \DateTime $createdAt;
|
||||
|
||||
#[ORM\Column(name: 'updated_at', type: 'datetime', nullable: true)]
|
||||
private \DateTime $updatedAt;
|
||||
|
||||
#[ORM\Column(name: 'public', type: 'boolean', nullable: false, options: ['default' => false])]
|
||||
private bool $public = false;
|
||||
|
||||
#[ORM\Column(name: 'whitelist_only', type: 'boolean', nullable: false, options: ['default' => false])]
|
||||
private bool $whitelistOnly = false;
|
||||
|
||||
#[ORM\OneToMany(mappedBy: 'author', targetEntity: Subscription::class, fetch: 'EXTRA_LAZY')]
|
||||
private ArrayCollection $subscribers;
|
||||
|
||||
#[ORM\OneToMany(mappedBy: 'subscriber', targetEntity: Subscription::class, fetch: 'EXTRA_LAZY')]
|
||||
private ArrayCollection $subscriptions;
|
||||
|
||||
#[ORM\OneToMany(mappedBy: 'author', targetEntity: SubscriptionEvent::class, fetch: 'EXTRA_LAZY')]
|
||||
private ArrayCollection $newSubscriberEvents;
|
||||
|
||||
#[ORM\Column(name: 'is_removed', type: 'boolean', options: ['default' => false])]
|
||||
private bool $removed = false;
|
||||
|
||||
public function __construct(
|
||||
int $id,
|
||||
\DateTime $createdAt = null,
|
||||
string $login = null,
|
||||
string $name = null
|
||||
) {
|
||||
$this->id = $id;
|
||||
$this->login = $login;
|
||||
$this->name = $name;
|
||||
$this->createdAt = $createdAt ?: new \DateTime();
|
||||
|
||||
$this->subscribers = new ArrayCollection();
|
||||
$this->subscriptions = new ArrayCollection();
|
||||
$this->newSubscriberEvents = new ArrayCollection();
|
||||
}
|
||||
|
||||
#[ORM\PreUpdate]
|
||||
public function preUpdate(): void
|
||||
{
|
||||
$this->updatedAt = new \DateTime();
|
||||
}
|
||||
|
||||
public function getId(): int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getLogin(): string
|
||||
{
|
||||
return $this->login;
|
||||
}
|
||||
|
||||
public function getName(): ?string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
public function updateLoginAndName(string $login, ?string $name): self
|
||||
{
|
||||
$this->login = $login;
|
||||
$this->name = $name;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function addSubscriber(Subscription $subscribers): self
|
||||
{
|
||||
$this->subscribers[] = $subscribers;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function removeSubscriber(Subscription $subscribers)
|
||||
{
|
||||
$this->subscribers->removeElement($subscribers);
|
||||
}
|
||||
|
||||
/** @return Subscription[]|ArrayCollection */
|
||||
public function getSubscribers(): ArrayCollection
|
||||
{
|
||||
return $this->subscribers;
|
||||
}
|
||||
|
||||
/** @return Subscription[]|ArrayCollection */
|
||||
public function getSubscriptions(): ArrayCollection
|
||||
{
|
||||
return $this->subscriptions;
|
||||
}
|
||||
|
||||
public function addNewSubscriberEvent(SubscriptionEvent $newSubscriberEvents): self
|
||||
{
|
||||
$this->newSubscriberEvents[] = $newSubscriberEvents;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/** @return SubscriptionEvent[]|ArrayCollection */
|
||||
public function getNewSubscriberEvents(): ArrayCollection
|
||||
{
|
||||
return $this->newSubscriberEvents;
|
||||
}
|
||||
|
||||
public function getCreatedAt(): \DateTime
|
||||
{
|
||||
return $this->createdAt;
|
||||
}
|
||||
|
||||
public function getUpdatedAt(): ?\DateTime
|
||||
{
|
||||
return $this->updatedAt;
|
||||
}
|
||||
|
||||
public function updatePrivacy(?bool $public, ?bool $whitelistOnly): void
|
||||
{
|
||||
$this->public = $public;
|
||||
$this->whitelistOnly = $whitelistOnly;
|
||||
}
|
||||
|
||||
public function isPublic(): ?bool
|
||||
{
|
||||
return $this->public;
|
||||
}
|
||||
|
||||
public function isWhitelistOnly(): bool
|
||||
{
|
||||
return $this->whitelistOnly;
|
||||
}
|
||||
|
||||
public function isRemoved(): bool
|
||||
{
|
||||
return $this->removed;
|
||||
}
|
||||
|
||||
public function markAsRemoved(): void
|
||||
{
|
||||
$this->removed = true;
|
||||
}
|
||||
|
||||
public function restore(): void
|
||||
{
|
||||
$this->removed = false;
|
||||
}
|
||||
}
|
|
@ -1,16 +1,35 @@
|
|||
<?php
|
||||
|
||||
namespace src\PointToolsBundle\Repository;
|
||||
declare(strict_types=1);
|
||||
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
use src\PointToolsBundle\DTO\TopUserDTO;
|
||||
use src\PointToolsBundle\Entity\User;
|
||||
namespace App\Repository;
|
||||
|
||||
class UserRepository extends EntityRepository
|
||||
use App\Entity\User;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
|
||||
/**
|
||||
* @extends ServiceEntityRepository<User>
|
||||
*
|
||||
* @method User|null find($id, $lockMode = null, $lockVersion = null)
|
||||
* @method User|null findOneBy(array $criteria, array $orderBy = null)
|
||||
* @method User[] findAll()
|
||||
* @method User[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
|
||||
*/
|
||||
class UserRepository extends ServiceEntityRepository
|
||||
{
|
||||
public function add(User $entity)
|
||||
public function __construct(ManagerRegistry $registry)
|
||||
{
|
||||
parent::__construct($registry, User::class);
|
||||
}
|
||||
|
||||
public function save(User $entity, bool $flush = false): void
|
||||
{
|
||||
$this->getEntityManager()->persist($entity);
|
||||
|
||||
if ($flush) {
|
||||
$this->getEntityManager()->flush();
|
||||
}
|
||||
}
|
||||
|
||||
public function findActiveUserWithSubscribers(int $id): ?User
|
||||
|
@ -29,9 +48,7 @@ class UserRepository extends EntityRepository
|
|||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Case-insensitive user search
|
||||
*/
|
||||
/** Case-insensitive user search */
|
||||
public function findUserByLogin(string $login): ?User
|
||||
{
|
||||
$qb = $this->createQueryBuilder('u');
|
||||
|
@ -75,9 +92,7 @@ class UserRepository extends EntityRepository
|
|||
return $qb->select('COUNT(u)')->getQuery()->getSingleScalarResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return User[]
|
||||
*/
|
||||
/** @return User[] */
|
||||
public function findUserSubscribersById(int $id): array
|
||||
{
|
||||
$qb = $this->createQueryBuilder('u');
|
Loading…
Reference in a new issue