diff --git a/src/Controller/DomainRefreshController.php b/src/Controller/DomainRefreshController.php new file mode 100644 index 0000000..5d3a46d --- /dev/null +++ b/src/Controller/DomainRefreshController.php @@ -0,0 +1,19 @@ +registerDomains([$ldhName]); + } +} \ No newline at end of file diff --git a/src/Controller/TestController.php b/src/Controller/TestController.php index 00782cc..241f558 100644 --- a/src/Controller/TestController.php +++ b/src/Controller/TestController.php @@ -28,24 +28,12 @@ class TestController extends AbstractController { public function __construct( - private readonly RDAPService $RDAPService, private readonly DomainRepository $domainRepository ) { } - #[Route(path: '/test/register', name: 'test_register_domain')] - public function testRegisterDomain(Request $request): Response - { - try { - $this->RDAPService->registerDomains(explode(',', $request->query->get('domains'))); - } catch (Exception $e) { - return new Response($e->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR); - } - return new Response(); - } - #[Route(path: '/test/publish/calendar', name: 'test_publish_calendar')] public function testPublishCalendar(): Response { diff --git a/src/Entity/Domain.php b/src/Entity/Domain.php index dfe4f46..864125c 100644 --- a/src/Entity/Domain.php +++ b/src/Entity/Domain.php @@ -5,6 +5,8 @@ namespace App\Entity; use ApiPlatform\Metadata\ApiResource; use ApiPlatform\Metadata\Get; use ApiPlatform\Metadata\GetCollection; +use ApiPlatform\Metadata\Post; +use App\Controller\DomainRefreshController; use App\Repository\DomainRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; @@ -33,10 +35,20 @@ use Symfony\Component\Serializer\Attribute\Groups; 'event:list', 'entity:list', 'domain-entity:entity', - 'nameserver-entity:nameserver', - 'nameserver:item', + 'nameserver-entity:nameserver' ] ] + ), + new Post( + uriTemplate: '/domains/{ldhName}', + status: 204, + controller: DomainRefreshController::class, + openapiContext: [ + 'summary' => 'Request an update of domain name data', + 'description' => 'Triggers a refresh of the domain information.', + 'requestBody' => false + ], + deserialize: false ) ] )] diff --git a/src/Entity/Nameserver.php b/src/Entity/Nameserver.php index fa4e666..16be6e8 100644 --- a/src/Entity/Nameserver.php +++ b/src/Entity/Nameserver.php @@ -2,6 +2,9 @@ namespace App\Entity; +use ApiPlatform\Metadata\ApiResource; +use ApiPlatform\Metadata\Get; +use ApiPlatform\Metadata\GetCollection; use App\Repository\NameserverRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; @@ -9,24 +12,50 @@ use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Serializer\Attribute\Groups; #[ORM\Entity(repositoryClass: NameserverRepository::class)] +#[ApiResource( + operations: [ + new GetCollection( + uriTemplate: '/nameservers', + normalizationContext: [ + 'groups' => [ + 'nameserver:list' + ] + ] + ), + new Get( + uriTemplate: '/nameservers/{ldhName}', + normalizationContext: [ + 'groups' => [ + 'nameserver:item', + 'domain:list', + 'nameserver-entity:entity', + 'entity:list', + "event:list" + ] + ] + ) + ] +)] class Nameserver { #[ORM\Id] #[ORM\Column(length: 255)] - #[Groups(['nameserver:item'])] + #[Groups(['nameserver:item', 'nameserver:list', 'domain:item'])] private ?string $ldhName = null; /** * @var Collection */ #[ORM\OneToMany(targetEntity: NameserverEntity::class, mappedBy: 'nameserver', cascade: ['persist'], orphanRemoval: true)] + #[Groups(['nameserver:item', 'domain:item'])] private Collection $nameserverEntities; /** * @var Collection */ #[ORM\ManyToMany(targetEntity: Domain::class, mappedBy: 'nameservers')] + #[Groups(['nameserver:item'])] private Collection $domains; public function __construct()