From e4334b2eb586cb9a552262e471c8c94a4d535c1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Gangloff?= Date: Fri, 19 Jul 2024 20:40:30 +0200 Subject: [PATCH] feat: add tld properties on API --- assets/app.tsx | 4 -- migrations/Version20240719164643.php | 40 ------------------- ...19124300.php => Version20240719183550.php} | 7 +++- src/Entity/Tld.php | 24 +++++++++++ .../UpdateRdapServersHandler.php | 1 - src/Service/RDAPService.php | 3 ++ 6 files changed, 32 insertions(+), 47 deletions(-) delete mode 100644 assets/app.tsx delete mode 100644 migrations/Version20240719164643.php rename migrations/{Version20240719124300.php => Version20240719183550.php} (94%) diff --git a/assets/app.tsx b/assets/app.tsx deleted file mode 100644 index fca53fd..0000000 --- a/assets/app.tsx +++ /dev/null @@ -1,4 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; - -ReactDOM.render(
, document.getElementById('root')); diff --git a/migrations/Version20240719164643.php b/migrations/Version20240719164643.php deleted file mode 100644 index 7100076..0000000 --- a/migrations/Version20240719164643.php +++ /dev/null @@ -1,40 +0,0 @@ -addSql('ALTER TABLE tld ADD COLUMN contract_terminated BOOLEAN DEFAULT NULL'); - $this->addSql('ALTER TABLE tld ADD COLUMN date_of_contract_signature DATE DEFAULT NULL'); - $this->addSql('ALTER TABLE tld ADD COLUMN delegation_date DATE DEFAULT NULL'); - $this->addSql('ALTER TABLE tld ADD COLUMN registry_operator VARCHAR(255) DEFAULT NULL'); - $this->addSql('ALTER TABLE tld ADD COLUMN removal_date DATE DEFAULT NULL'); - $this->addSql('ALTER TABLE tld ADD COLUMN specification13 BOOLEAN DEFAULT NULL'); - } - - public function down(Schema $schema): void - { - // this down() migration is auto-generated, please modify it to your needs - $this->addSql('CREATE TEMPORARY TABLE __temp__tld AS SELECT tld FROM tld'); - $this->addSql('DROP TABLE tld'); - $this->addSql('CREATE TABLE tld (tld VARCHAR(63) NOT NULL, PRIMARY KEY(tld))'); - $this->addSql('INSERT INTO tld (tld) SELECT tld FROM __temp__tld'); - $this->addSql('DROP TABLE __temp__tld'); - } -} diff --git a/migrations/Version20240719124300.php b/migrations/Version20240719183550.php similarity index 94% rename from migrations/Version20240719124300.php rename to migrations/Version20240719183550.php index c947866..f68301c 100644 --- a/migrations/Version20240719124300.php +++ b/migrations/Version20240719183550.php @@ -10,7 +10,7 @@ use Doctrine\Migrations\AbstractMigration; /** * Auto-generated Migration: Please modify to your needs! */ -final class Version20240719124300 extends AbstractMigration +final class Version20240719183550 extends AbstractMigration { public function getDescription(): string { @@ -49,7 +49,10 @@ final class Version20240719124300 extends AbstractMigration $this->addSql('CREATE TABLE rdap_server (url VARCHAR(255) NOT NULL, tld_id VARCHAR(63) NOT NULL, updated_at DATE NOT NULL --(DC2Type:date_immutable) , PRIMARY KEY(url, tld_id), CONSTRAINT FK_CCBF17A850F7084E FOREIGN KEY (tld_id) REFERENCES tld (tld) NOT DEFERRABLE INITIALLY IMMEDIATE)'); $this->addSql('CREATE INDEX IDX_CCBF17A850F7084E ON rdap_server (tld_id)'); - $this->addSql('CREATE TABLE tld (tld VARCHAR(63) NOT NULL, PRIMARY KEY(tld))'); + $this->addSql('CREATE TABLE tld (tld VARCHAR(63) NOT NULL, contract_terminated BOOLEAN DEFAULT NULL, date_of_contract_signature DATE DEFAULT NULL --(DC2Type:date_immutable) + , delegation_date DATE DEFAULT NULL --(DC2Type:date_immutable) + , registry_operator VARCHAR(255) DEFAULT NULL, removal_date DATE DEFAULT NULL --(DC2Type:date_immutable) + , specification13 BOOLEAN DEFAULT NULL, PRIMARY KEY(tld))'); $this->addSql('CREATE TABLE user (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, email VARCHAR(180) NOT NULL, roles CLOB NOT NULL --(DC2Type:json) , password VARCHAR(255) NOT NULL)'); $this->addSql('CREATE UNIQUE INDEX UNIQ_IDENTIFIER_EMAIL ON user (email)'); diff --git a/src/Entity/Tld.php b/src/Entity/Tld.php index 2ffff18..e30503b 100644 --- a/src/Entity/Tld.php +++ b/src/Entity/Tld.php @@ -2,18 +2,36 @@ namespace App\Entity; +use ApiPlatform\Metadata\ApiResource; +use ApiPlatform\Metadata\Get; +use ApiPlatform\Metadata\GetCollection; use App\Repository\TldRepository; use DateTimeImmutable; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; +use Symfony\Component\Serializer\Attribute\Groups; +#[ApiResource( + shortName: 'Top Level Domain', + operations: [ + new GetCollection( + uriTemplate: '/tld', + normalizationContext: ['groups' => ['tld:list']] + ), + new Get( + uriTemplate: '/tld/{tld}', + normalizationContext: ['groups' => ['tld:item']] + ) + ] +)] #[ORM\Entity(repositoryClass: TldRepository::class)] class Tld { #[ORM\Id] #[ORM\Column(length: 63)] + #[Groups(["tld:list", "tld:item"])] private ?string $tld = null; /** * @var Collection @@ -22,21 +40,27 @@ class Tld private Collection $rdapServers; #[ORM\Column(nullable: true)] + #[Groups(["tld:list", "tld:item"])] private ?bool $contractTerminated = null; #[ORM\Column(type: Types::DATE_IMMUTABLE, nullable: true)] + #[Groups(["tld:item"])] private ?DateTimeImmutable $dateOfContractSignature = null; #[ORM\Column(type: Types::DATE_IMMUTABLE, nullable: true)] + #[Groups(["tld:item"])] private ?DateTimeImmutable $delegationDate = null; #[ORM\Column(length: 255, nullable: true)] + #[Groups(["tld:item"])] private ?string $registryOperator = null; #[ORM\Column(type: Types::DATE_IMMUTABLE, nullable: true)] + #[Groups(["tld:item"])] private ?DateTimeImmutable $removalDate = null; #[ORM\Column(nullable: true)] + #[Groups(["tld:item"])] private ?bool $specification13 = null; public function __construct() diff --git a/src/MessageHandler/UpdateRdapServersHandler.php b/src/MessageHandler/UpdateRdapServersHandler.php index e99af4b..60daaec 100644 --- a/src/MessageHandler/UpdateRdapServersHandler.php +++ b/src/MessageHandler/UpdateRdapServersHandler.php @@ -15,7 +15,6 @@ use Throwable; #[AsMessageHandler] final readonly class UpdateRdapServersHandler { - public function __construct(private RDAPService $RDAPService) { diff --git a/src/Service/RDAPService.php b/src/Service/RDAPService.php index 0d03365..36e18ed 100644 --- a/src/Service/RDAPService.php +++ b/src/Service/RDAPService.php @@ -259,6 +259,7 @@ readonly class RDAPService foreach ($dnsRoot['services'] as $service) { foreach ($service[0] as $tld) { + if ($tld === "") continue; $tldReference = $this->em->getReference(Tld::class, $tld); foreach ($service[1] as $rdapServerUrl) { $server = $this->rdapServerRepository->findOneBy(["tld" => $tldReference, "url" => $rdapServerUrl]); //ICI @@ -293,6 +294,7 @@ readonly class RDAPService foreach (array_diff($tldList, $storedTldList) as $tld) { + if ($tld === "") continue; $this->em->persist((new Tld())->setTld($tld)); } $this->em->flush(); @@ -313,6 +315,7 @@ readonly class RDAPService )->toArray()['gTLDs']; foreach ($gTldList as $gTld) { + if ($gTld['gTLD'] === "") continue; $gtTldEntity = $this->tldRepository->findOneBy(['tld' => $gTld['gTLD']]); if ($gtTldEntity === null) $gtTldEntity = new Tld();