WIP: Symfony 6 project remake #2
|
@ -1,32 +1,24 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace src\PointToolsBundle\Controller;
|
||||
namespace App\Controller;
|
||||
|
||||
use App\DTO\{TopUserDTO, DailyEventsDTO};
|
||||
use Knp\Component\Pager\PaginatorInterface;
|
||||
use src\PointToolsBundle\DTO\{TopUserDTO};
|
||||
use src\PointToolsBundle\DTO\DailyEvents;
|
||||
use src\PointToolsBundle\Entity\User;
|
||||
use src\PointToolsBundle\Repository\UserRenameEventRepository;
|
||||
use src\PointToolsBundle\Repository\UserRepository;
|
||||
use src\PointToolsBundle\Repository\{SubscriptionEventRepository};
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Ob\HighchartsBundle\Highcharts\Highchart;
|
||||
use App\Entity\User;
|
||||
use App\Repository\{SubscriptionEventRepository, UserRenameEventRepository, UserRepository};
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\{Request, Response};
|
||||
use Symfony\Component\Translation\TranslatorInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
class UserController extends AbstractController
|
||||
{
|
||||
/** @var TranslatorInterface */
|
||||
private $translator;
|
||||
|
||||
public function __construct(TranslatorInterface $translator)
|
||||
{
|
||||
$this->translator = $translator;
|
||||
public function __construct(
|
||||
private readonly TranslatorInterface $translator,
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $login
|
||||
*/
|
||||
public function showAction(
|
||||
Request $request,
|
||||
string $login,
|
||||
|
@ -68,16 +60,16 @@ class UserController extends AbstractController
|
|||
}
|
||||
|
||||
/**
|
||||
* @param DailyEventsDTO[] $eventsByDay
|
||||
*@todo move to the service
|
||||
*
|
||||
* @param DailyEvents[] $eventsByDay
|
||||
*/
|
||||
private function createEventsDynamicChart(array $eventsByDay = []): Highchart
|
||||
{
|
||||
$data = [];
|
||||
|
||||
foreach ($eventsByDay as $dailyEvents) {
|
||||
$data[$dailyEvents->getDate()->format('d.m')] = $dailyEvents->getEventsCount();
|
||||
$data[$dailyEvents->date->format('d.m')] = $dailyEvents->eventsCount;
|
||||
}
|
||||
|
||||
return $this->createChart('eventschart', 'line', $data, 'Events by day', 'amount');
|
||||
|
@ -93,7 +85,7 @@ class UserController extends AbstractController
|
|||
$data = [];
|
||||
|
||||
foreach ($topUsers as $topUser) {
|
||||
$data[$topUser->getLogin()] = $topUser->getSubscribersCount();
|
||||
$data[$topUser->login] = $topUser->subscribersCount;
|
||||
}
|
||||
|
||||
return $this->createChart('topchart', 'bar', $data, 'Top users', 'amount');
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Repository;
|
||||
|
||||
use App\DTO\DailyEventsDTO;
|
||||
use App\Entity\SubscriptionEvent;
|
||||
use App\Entity\User;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
|
@ -101,14 +102,14 @@ class SubscriptionEventRepository extends ServiceEntityRepository
|
|||
return $qb->getQuery()->getResult();
|
||||
}
|
||||
|
||||
/** @return SubscriptionEvent[] */
|
||||
/** @return DailyEventsDTO[] */
|
||||
public function getLastEventsByDay(int $days = 30): array
|
||||
{
|
||||
$qb = $this->createQueryBuilder('se');
|
||||
|
||||
$rows = $qb
|
||||
->select([
|
||||
'NEW Skobkin\Bundle\PointToolsBundle\DTO\DailyEvents(DAY(se.date), COUNT(se))',
|
||||
'NEW App\DTO\DailyEventsDTO(DAY(se.date), COUNT(se))',
|
||||
'DAY(se.date) as day',
|
||||
])
|
||||
->groupBy('day')
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Repository;
|
||||
|
||||
use App\DTO\TopUserDTO;
|
||||
use App\Entity\Subscription;
|
||||
use App\Entity\User;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
|
@ -114,11 +115,11 @@ class UserRepository extends ServiceEntityRepository
|
|||
*/
|
||||
public function getTopUsers(int $limit = 30): array
|
||||
{
|
||||
$qb = $this->getEntityManager()->getRepository('SkobkinPointToolsBundle:Subscription')->createQueryBuilder('s');
|
||||
$qb = $this->getEntityManager()->getRepository(Subscription::class)->createQueryBuilder('s');
|
||||
|
||||
$rows = $qb
|
||||
->select([
|
||||
'NEW Skobkin\Bundle\PointToolsBundle\DTO\TopUserDTO(a.login, COUNT(s.subscriber))',
|
||||
'NEW App\DTO\TopUserDTO(a.login, COUNT(s.subscriber))',
|
||||
'COUNT(s.subscriber) as subscribers_count'
|
||||
])
|
||||
->innerJoin('s.author', 'a')
|
||||
|
|
Loading…
Reference in a new issue