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