WIP: Symfony 6 project remake #2
|
@ -1,93 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace src\PointToolsBundle\Entity;
|
||||
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use src\PointToolsBundle\Entity\User;
|
||||
|
||||
/**
|
||||
* @ORM\Table(name="log", schema="subscriptions", indexes={
|
||||
* @ORM\Index(name="idx_subscription_author", columns={"author_id"}),
|
||||
* @ORM\Index(name="idx_subscription_subscriber", columns={"subscriber_id"}),
|
||||
* @ORM\Index(name="idx_subscription_date", columns={"date"})
|
||||
* })
|
||||
* @ORM\Entity(repositoryClass="Skobkin\Bundle\PointToolsBundle\Repository\SubscriptionEventRepository", readOnly=true)
|
||||
*/
|
||||
class SubscriptionEvent
|
||||
{
|
||||
public const ACTION_SUBSCRIBE = 'subscribe';
|
||||
public const ACTION_UNSUBSCRIBE = 'unsubscribe';
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*
|
||||
* @ORM\Column(name="id", type="integer")
|
||||
* @ORM\Id
|
||||
* @ORM\GeneratedValue(strategy="AUTO")
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @var User Blog author
|
||||
*
|
||||
* @ORM\ManyToOne(targetEntity="User", inversedBy="newSubscriberEvents")
|
||||
* @ORM\JoinColumn(name="author_id", nullable=false)
|
||||
*/
|
||||
private $author;
|
||||
|
||||
/**
|
||||
* @var User Blog subscriber
|
||||
*
|
||||
* @ORM\ManyToOne(targetEntity="User")
|
||||
* @ORM\JoinColumn(name="subscriber_id", nullable=false)
|
||||
*/
|
||||
private $subscriber;
|
||||
|
||||
/**
|
||||
* @var \DateTime
|
||||
*
|
||||
* @ORM\Column(name="date", type="datetime", nullable=false)
|
||||
*/
|
||||
private $date;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="action", type="string", length=12, nullable=false)
|
||||
*/
|
||||
private $action;
|
||||
|
||||
|
||||
public function __construct(User $author, User $subscriber, string $action = self::ACTION_SUBSCRIBE)
|
||||
{
|
||||
$this->author = $author;
|
||||
$this->subscriber = $subscriber;
|
||||
$this->action = $action;
|
||||
$this->date = new \DateTime();
|
||||
}
|
||||
|
||||
public function getId(): int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getDate(): \DateTime
|
||||
{
|
||||
return $this->date;
|
||||
}
|
||||
|
||||
public function getSubscriber(): User
|
||||
{
|
||||
return $this->subscriber;
|
||||
}
|
||||
|
||||
public function getAuthor(): User
|
||||
{
|
||||
return $this->author;
|
||||
}
|
||||
|
||||
public function getAction(): string
|
||||
{
|
||||
return $this->action;
|
||||
}
|
||||
}
|
72
src/Entity/SubscriptionEvent.php
Normal file
72
src/Entity/SubscriptionEvent.php
Normal file
|
@ -0,0 +1,72 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
use App\Repository\SubscriptionEventRepository;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Entity(repositoryClass: SubscriptionEventRepository::class, readOnly: true)]
|
||||
#[ORM\Table(name: 'log', schema: 'subscriptions')]
|
||||
#[ORM\Index(columns: ['author_id'], name: 'idx_subscription_author')]
|
||||
#[ORM\Index(columns: ['subscriber_id'], name: 'idx_subscription_subscriber')]
|
||||
#[ORM\Index(columns: ['date'], name: 'idx_subscription_date')]
|
||||
class SubscriptionEvent
|
||||
{
|
||||
public const ACTION_SUBSCRIBE = 'subscribe';
|
||||
public const ACTION_UNSUBSCRIBE = 'unsubscribe';
|
||||
|
||||
#[ORM\Id]
|
||||
#[ORM\GeneratedValue(strategy: 'AUTO')]
|
||||
#[ORM\Column(name: 'id', type: 'integer')]
|
||||
private ?int $id;
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'newSubscriberEvents')]
|
||||
#[ORM\JoinColumn(name: 'author_id', nullable: false)]
|
||||
private User $author;
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: User::class)]
|
||||
#[ORM\JoinColumn(name: 'subscriber_id', nullable: false)]
|
||||
private User $subscriber;
|
||||
|
||||
#[ORM\Column(name: 'date', type: 'datetime', nullable: false)]
|
||||
private \DateTime $date;
|
||||
|
||||
#[ORM\Column(name: 'action', type: 'string', length: 12, nullable: false)]
|
||||
private string $action;
|
||||
|
||||
|
||||
public function __construct(User $author, User $subscriber, string $action = self::ACTION_SUBSCRIBE)
|
||||
{
|
||||
$this->author = $author;
|
||||
$this->subscriber = $subscriber;
|
||||
$this->action = $action;
|
||||
$this->date = new \DateTime();
|
||||
}
|
||||
|
||||
public function getId(): int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getDate(): \DateTime
|
||||
{
|
||||
return $this->date;
|
||||
}
|
||||
|
||||
public function getSubscriber(): User
|
||||
{
|
||||
return $this->subscriber;
|
||||
}
|
||||
|
||||
public function getAuthor(): User
|
||||
{
|
||||
return $this->author;
|
||||
}
|
||||
|
||||
public function getAction(): string
|
||||
{
|
||||
return $this->action;
|
||||
}
|
||||
}
|
|
@ -1,22 +1,39 @@
|
|||
<?php
|
||||
|
||||
namespace src\PointToolsBundle\Repository;
|
||||
declare(strict_types=1);
|
||||
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
namespace App\Repository;
|
||||
|
||||
use App\Entity\SubscriptionEvent;
|
||||
use App\Entity\User;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\ORM\QueryBuilder;
|
||||
use src\PointToolsBundle\Entity\SubscriptionEvent;
|
||||
use src\PointToolsBundle\Entity\User;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
|
||||
class SubscriptionEventRepository extends EntityRepository
|
||||
/**
|
||||
* @extends ServiceEntityRepository<SubscriptionEvent>
|
||||
*
|
||||
* @method SubscriptionEvent|null find($id, $lockMode = null, $lockVersion = null)
|
||||
* @method SubscriptionEvent|null findOneBy(array $criteria, array $orderBy = null)
|
||||
* @method SubscriptionEvent[] findAll()
|
||||
* @method SubscriptionEvent[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
|
||||
*/
|
||||
class SubscriptionEventRepository extends ServiceEntityRepository
|
||||
{
|
||||
public function add(SubscriptionEvent $entity): void
|
||||
public function __construct(ManagerRegistry $registry)
|
||||
{
|
||||
$this->getEntityManager()->persist($entity);
|
||||
parent::__construct($registry, SubscriptionEvent::class);
|
||||
}
|
||||
|
||||
public function save(SubscriptionEvent $entity, bool $flush = false): void
|
||||
{
|
||||
$this->getEntityManager()->persist($entity);
|
||||
|
||||
if ($flush) {
|
||||
$this->getEntityManager()->flush();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getLastDayEventsCount(): int
|
||||
{
|
||||
$qb = $this->createQueryBuilder('se');
|
||||
|
@ -31,13 +48,7 @@ class SubscriptionEventRepository extends EntityRepository
|
|||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates QueryBuilder object for pagination of user subscribers events
|
||||
*
|
||||
* @param User $user
|
||||
*
|
||||
* @return QueryBuilder
|
||||
*/
|
||||
/** Creates QueryBuilder object for pagination of user subscribers events */
|
||||
public function createUserLastSubscribersEventsQuery(User $user): QueryBuilder
|
||||
{
|
||||
$qb = $this->createQueryBuilder('se');
|
||||
|
@ -54,9 +65,6 @@ class SubscriptionEventRepository extends EntityRepository
|
|||
/**
|
||||
* Get last user subscriber events
|
||||
*
|
||||
* @param User $user
|
||||
* @param int $limit
|
||||
*
|
||||
* @return SubscriptionEvent[]
|
||||
*/
|
||||
public function getUserLastSubscribersEvents(User $user, int $limit = 20): array
|
||||
|
@ -67,11 +75,7 @@ class SubscriptionEventRepository extends EntityRepository
|
|||
return $qb->getQuery()->getResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get last global subscriptions QueryBuilder for pagination
|
||||
*
|
||||
* @return QueryBuilder
|
||||
*/
|
||||
/** Get last global subscriptions QueryBuilder for pagination */
|
||||
public function createLastSubscriptionEventsQuery(): QueryBuilder
|
||||
{
|
||||
$qb = $this->createQueryBuilder('se');
|
||||
|
@ -87,8 +91,6 @@ class SubscriptionEventRepository extends EntityRepository
|
|||
/**
|
||||
* Get last global subscription events
|
||||
*
|
||||
* @param int $limit
|
||||
*
|
||||
* @return SubscriptionEvent[]
|
||||
*/
|
||||
public function getLastSubscriptionEvents(int $limit = 20): array
|
||||
|
@ -99,9 +101,7 @@ class SubscriptionEventRepository extends EntityRepository
|
|||
return $qb->getQuery()->getResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return SubscriptionEvent[]
|
||||
*/
|
||||
/** @return SubscriptionEvent[] */
|
||||
public function getLastEventsByDay(int $days = 30): array
|
||||
{
|
||||
$qb = $this->createQueryBuilder('se');
|
||||
|
@ -130,4 +130,4 @@ class SubscriptionEventRepository extends EntityRepository
|
|||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue