refactor: use Providers

This commit is contained in:
Maël Gangloff 2025-12-02 20:51:15 +01:00
parent 0f06af937f
commit 9466b4985c
No known key found for this signature in database
GPG Key ID: 11FDC81C24A7F629
8 changed files with 65 additions and 74 deletions

View File

@ -1,29 +0,0 @@
<?php
namespace App\Controller;
use App\Entity\Connector;
use App\Entity\User;
use Doctrine\Common\Collections\Collection;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Attribute\Route;
class ConnectorController extends AbstractController
{
#[Route(
path: '/api/connectors',
name: 'connector_get_all_mine',
defaults: [
'_api_resource_class' => Connector::class,
'_api_operation_name' => 'get_all_mine',
],
methods: ['GET']
)]
public function getConnector(): Collection
{
/** @var User $user */
$user = $this->getUser();
return $user->getConnectors();
}
}

View File

@ -5,12 +5,9 @@ namespace App\Controller;
use App\Entity\Domain;
use App\Entity\DomainEvent;
use App\Entity\DomainStatus;
use App\Entity\User;
use App\Entity\Watchlist;
use App\Repository\DomainRepository;
use App\Repository\WatchlistRepository;
use App\Service\CalendarService;
use App\Service\RDAPService;
use Eluceo\iCal\Domain\Entity\Calendar;
use Eluceo\iCal\Presentation\Component\Property;
use Eluceo\iCal\Presentation\Component\Property\Value\TextValue;
@ -29,9 +26,7 @@ class WatchlistController extends AbstractController
{
public function __construct(
private readonly WatchlistRepository $watchlistRepository,
private readonly RDAPService $RDAPService,
private readonly CalendarService $calendarService,
private readonly DomainRepository $domainRepository,
) {
}
@ -74,32 +69,6 @@ class WatchlistController extends AbstractController
]);
}
/**
* @throws \Exception
*/
#[Route(
path: '/api/tracked',
name: 'watchlist_get_tracked_domains',
defaults: [
'_api_resource_class' => Watchlist::class,
'_api_operation_name' => 'get_tracked_domains',
]
)]
public function getTrackedDomains(): array
{
/** @var User $user */
$user = $this->getUser();
$domains = $this->domainRepository->getMyTrackedDomains($user);
foreach ($domains as $domain) {
$domain->setExpiresInDays($this->RDAPService->getExpiresInDays($domain));
}
usort($domains, fn (Domain $d1, Domain $d2) => $d1->getExpiresInDays() - $d2->getExpiresInDays());
return $domains;
}
/**
* @throws \Exception
*/

View File

@ -11,6 +11,7 @@ use App\Config\ConnectorProvider;
use App\Repository\ConnectorRepository;
use App\State\ConnectorCreateProcessor;
use App\State\ConnectorDeleteProcessor;
use App\State\MyConnectorsProvider;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
@ -21,9 +22,8 @@ use Symfony\Component\Uid\Uuid;
shortName: 'Connector',
operations: [
new GetCollection(
routeName: 'connector_get_all_mine',
normalizationContext: ['groups' => 'connector:list'],
name: 'get_all_mine',
provider: MyConnectorsProvider::class
),
new Get(
normalizationContext: ['groups' => 'connector:list'],

View File

@ -23,15 +23,6 @@ use Symfony\Component\Serializer\Attribute\SerializedName;
#[ORM\Entity(repositoryClass: DomainRepository::class)]
#[ApiResource(
operations: [
/*
new GetCollection(
normalizationContext: [
'groups' => [
'domain:list'
]
]
),
*/
new GetCollection(
uriTemplate: '/domains',
normalizationContext: [

View File

@ -12,7 +12,9 @@ use App\Controller\InstanceController;
uriTemplate: '/config',
controller: InstanceController::class,
shortName: 'Configuration',
description: 'Public configuration of the server',
read: false,
name: 'server-configuration',
),
]
)]

View File

@ -10,6 +10,7 @@ use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
use ApiPlatform\Metadata\Put;
use App\Repository\WatchlistRepository;
use App\State\MyTrackedDomainProvider;
use App\State\MyWatchlistsProvider;
use App\State\WatchlistUpdateProcessor;
use Doctrine\Common\Collections\ArrayCollection;
@ -33,12 +34,10 @@ use Symfony\Component\Validator\Constraints as Assert;
'event:list',
],
],
name: 'get_all_mine',
provider: MyWatchlistsProvider::class,
),
new GetCollection(
uriTemplate: '/tracked',
routeName: 'watchlist_get_tracked_domains',
normalizationContext: [
'groups' => [
'domain:list',
@ -47,7 +46,7 @@ use Symfony\Component\Validator\Constraints as Assert;
'event:list',
],
],
name: 'get_tracked_domains'
provider: MyTrackedDomainProvider::class
),
new Get(
normalizationContext: [

View File

@ -0,0 +1,23 @@
<?php
namespace App\State;
use ApiPlatform\Metadata\Operation;
use ApiPlatform\State\ProviderInterface;
use App\Entity\User;
use Symfony\Bundle\SecurityBundle\Security;
readonly class MyConnectorsProvider implements ProviderInterface
{
public function __construct(private Security $security)
{
}
public function provide(Operation $operation, array $uriVariables = [], array $context = []): object|array|null
{
/** @var User $user */
$user = $this->security->getUser();
return $user->getConnectors();
}
}

View File

@ -0,0 +1,36 @@
<?php
namespace App\State;
use ApiPlatform\Metadata\Operation;
use ApiPlatform\State\ProviderInterface;
use App\Entity\Domain;
use App\Entity\User;
use App\Repository\DomainRepository;
use App\Service\RDAPService;
use Symfony\Bundle\SecurityBundle\Security;
readonly class MyTrackedDomainProvider implements ProviderInterface
{
public function __construct(
private Security $security,
private DomainRepository $domainRepository,
private RDAPService $RDAPService,
) {
}
public function provide(Operation $operation, array $uriVariables = [], array $context = []): object|array|null
{
/** @var User $user */
$user = $this->security->getUser();
$domains = $this->domainRepository->getMyTrackedDomains($user);
foreach ($domains as $domain) {
$domain->setExpiresInDays($this->RDAPService->getExpiresInDays($domain));
}
usort($domains, fn (Domain $d1, Domain $d2) => $d1->getExpiresInDays() - $d2->getExpiresInDays());
return $domains;
}
}