Ported UserController. Fixed PhpDoc type hinting in SubscriptionEventRepository and UserRepository.

This commit is contained in:
Alexey Skobkin 2023-04-01 21:00:16 +03:00
parent 77fa05f457
commit 1393e2d53f
No known key found for this signature in database
GPG Key ID: 5D5CEF6F221278E7
3 changed files with 21 additions and 27 deletions

View File

@ -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
}
/**
* @todo move to the service
* @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');

View File

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

View File

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