mirror of
https://github.com/maelgangloff/domain-watchdog.git
synced 2025-12-29 16:15:04 +00:00
feat: add id column on entity
This commit is contained in:
@@ -117,7 +117,7 @@ class Domain
|
||||
#[SerializedName('oldStatus')]
|
||||
private Collection $domainStatuses;
|
||||
|
||||
#[ORM\Column(nullable: false)]
|
||||
#[ORM\Column(nullable: false, options: ['default' => false])]
|
||||
#[Groups(['domain:item', 'domain:list'])]
|
||||
private ?bool $delegationSigned = null;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ class DomainEntity
|
||||
|
||||
#[ORM\Id]
|
||||
#[ORM\ManyToOne(targetEntity: Entity::class, cascade: ['persist'], inversedBy: 'domainEntities')]
|
||||
#[ORM\JoinColumn(referencedColumnName: 'handle', nullable: false)]
|
||||
#[ORM\JoinColumn(name: 'entity_uid', referencedColumnName: 'id', nullable: false)]
|
||||
#[Groups(['domain-entity:entity'])]
|
||||
private ?Entity $entity = null;
|
||||
|
||||
|
||||
@@ -12,6 +12,9 @@ use Symfony\Component\Serializer\Attribute\Groups;
|
||||
use Symfony\Component\Serializer\Attribute\SerializedName;
|
||||
|
||||
#[ORM\Entity(repositoryClass: EntityRepository::class)]
|
||||
#[ORM\UniqueConstraint(
|
||||
columns: ['tld_id', 'handle']
|
||||
)]
|
||||
#[ApiResource(
|
||||
operations: [
|
||||
/*
|
||||
@@ -21,7 +24,7 @@ use Symfony\Component\Serializer\Attribute\SerializedName;
|
||||
),
|
||||
*/
|
||||
new Get(
|
||||
uriTemplate: '/entities/{handle}',
|
||||
uriTemplate: '/entities/{id}',
|
||||
normalizationContext: [
|
||||
'groups' => [
|
||||
'event:list',
|
||||
@@ -38,6 +41,15 @@ use Symfony\Component\Serializer\Attribute\SerializedName;
|
||||
class Entity
|
||||
{
|
||||
#[ORM\Id]
|
||||
#[ORM\GeneratedValue]
|
||||
#[ORM\Column]
|
||||
private ?int $id = null;
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: Tld::class, inversedBy: 'entities')]
|
||||
#[ORM\JoinColumn(referencedColumnName: 'tld', nullable: true)]
|
||||
#[Groups(['entity:list', 'entity:item', 'domain:item'])]
|
||||
private ?Tld $tld = null;
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
#[Groups(['entity:list', 'entity:item', 'domain:item'])]
|
||||
private ?string $handle = null;
|
||||
@@ -205,4 +217,28 @@ class Entity
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function setId(int $id): static
|
||||
{
|
||||
$this->id = $id;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getTld(): ?Tld
|
||||
{
|
||||
return $this->tld;
|
||||
}
|
||||
|
||||
public function setTld(?Tld $tld): static
|
||||
{
|
||||
$this->tld = $tld;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,12 +7,12 @@ use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Entity(repositoryClass: EntityEventRepository::class)]
|
||||
#[ORM\UniqueConstraint(
|
||||
columns: ['action', 'date', 'entity_id']
|
||||
columns: ['action', 'date', 'entity_uid']
|
||||
)]
|
||||
class EntityEvent extends Event
|
||||
{
|
||||
#[ORM\ManyToOne(targetEntity: Entity::class, inversedBy: 'events')]
|
||||
#[ORM\JoinColumn(referencedColumnName: 'handle', nullable: false)]
|
||||
#[ORM\JoinColumn(name: 'entity_uid', referencedColumnName: 'id', nullable: false)]
|
||||
private ?Entity $entity = null;
|
||||
|
||||
public function getEntity(): ?Entity
|
||||
|
||||
@@ -19,7 +19,7 @@ class NameserverEntity
|
||||
|
||||
#[ORM\Id]
|
||||
#[ORM\ManyToOne(targetEntity: Entity::class, cascade: ['persist'], inversedBy: 'nameserverEntities')]
|
||||
#[ORM\JoinColumn(referencedColumnName: 'handle', nullable: false)]
|
||||
#[ORM\JoinColumn(name: 'entity_uid', referencedColumnName: 'id', nullable: false)]
|
||||
#[Groups(['nameserver-entity:entity'])]
|
||||
private ?Entity $entity = null;
|
||||
|
||||
|
||||
@@ -70,9 +70,16 @@ class Tld
|
||||
#[Groups(['tld:item'])]
|
||||
private ?TldType $type = null;
|
||||
|
||||
/**
|
||||
* @var Collection<int, Entity>
|
||||
*/
|
||||
#[ORM\OneToMany(targetEntity: Entity::class, mappedBy: 'tld')]
|
||||
private Collection $entities;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->rdapServers = new ArrayCollection();
|
||||
$this->entities = new ArrayCollection();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -200,4 +207,34 @@ class Tld
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection<int, Entity>
|
||||
*/
|
||||
public function getEntities(): Collection
|
||||
{
|
||||
return $this->entities;
|
||||
}
|
||||
|
||||
public function addEntity(Entity $entity): static
|
||||
{
|
||||
if (!$this->entities->contains($entity)) {
|
||||
$this->entities->add($entity);
|
||||
$entity->setTld($this);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function removeEntity(Entity $entity): static
|
||||
{
|
||||
if ($this->entities->removeElement($entity)) {
|
||||
// set the owning side to null (unless already changed)
|
||||
if ($entity->getTld() === $this) {
|
||||
$entity->setTld(null);
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -357,7 +357,7 @@ readonly class RDAPService
|
||||
if (isset($rdapData['entities']) && is_array($rdapData['entities'])) {
|
||||
foreach ($rdapData['entities'] as $rdapEntity) {
|
||||
$roles = $this->extractEntityRoles($rdapData['entities'], $rdapEntity);
|
||||
$entity = $this->registerEntity($rdapEntity, $roles, $domain->getLdhName());
|
||||
$entity = $this->registerEntity($rdapEntity, $roles, $domain->getLdhName(), $domain->getTld());
|
||||
|
||||
$domainEntity = $this->domainEntityRepository->findOneBy([
|
||||
'domain' => $domain,
|
||||
@@ -391,7 +391,7 @@ readonly class RDAPService
|
||||
|
||||
foreach ($rdapData['nameservers'] as $rdapNameserver) {
|
||||
$nameserver = $this->fetchOrCreateNameserver($rdapNameserver, $domain);
|
||||
$this->updateNameserverEntities($nameserver, $rdapNameserver);
|
||||
$this->updateNameserverEntities($nameserver, $rdapNameserver, $domain->getTld());
|
||||
|
||||
if (!$domain->getNameservers()->contains($nameserver)) {
|
||||
$domain->addNameserver($nameserver);
|
||||
@@ -426,7 +426,7 @@ readonly class RDAPService
|
||||
/**
|
||||
* @throws \DateMalformedStringException
|
||||
*/
|
||||
private function updateNameserverEntities(Nameserver $nameserver, array $rdapNameserver): void
|
||||
private function updateNameserverEntities(Nameserver $nameserver, array $rdapNameserver, Tld $tld): void
|
||||
{
|
||||
if (!isset($rdapNameserver['entities']) || !is_array($rdapNameserver['entities'])) {
|
||||
return;
|
||||
@@ -434,7 +434,7 @@ readonly class RDAPService
|
||||
|
||||
foreach ($rdapNameserver['entities'] as $rdapEntity) {
|
||||
$roles = $this->extractEntityRoles($rdapNameserver['entities'], $rdapEntity);
|
||||
$entity = $this->registerEntity($rdapEntity, $roles, $nameserver->getLdhName());
|
||||
$entity = $this->registerEntity($rdapEntity, $roles, $nameserver->getLdhName(), $tld);
|
||||
|
||||
$nameserverEntity = $this->nameserverEntityRepository->findOneBy([
|
||||
'nameserver' => $nameserver,
|
||||
@@ -483,7 +483,7 @@ readonly class RDAPService
|
||||
* @throws \DateMalformedStringException
|
||||
* @throws \Exception
|
||||
*/
|
||||
private function registerEntity(array $rdapEntity, array $roles, string $domain): Entity
|
||||
private function registerEntity(array $rdapEntity, array $roles, string $domain, Tld $tld): Entity
|
||||
{
|
||||
/*
|
||||
* If the RDAP server transmits the entity's IANA number, it is used as a priority to identify the entity
|
||||
@@ -513,6 +513,7 @@ readonly class RDAPService
|
||||
|
||||
$entity = $this->entityRepository->findOneBy([
|
||||
'handle' => $rdapEntity['handle'],
|
||||
'tld' => is_numeric($rdapEntity['handle']) ? null : $tld,
|
||||
]);
|
||||
|
||||
if (null === $entity) {
|
||||
@@ -523,7 +524,7 @@ readonly class RDAPService
|
||||
]);
|
||||
}
|
||||
|
||||
$entity->setHandle($rdapEntity['handle']);
|
||||
$entity->setHandle($rdapEntity['handle'])->setTld(is_numeric($rdapEntity['handle']) ? null : $tld);
|
||||
|
||||
if (isset($rdapEntity['remarks']) && is_array($rdapEntity['remarks']) && !is_numeric($rdapEntity['handle'])) {
|
||||
$entity->setRemarks($rdapEntity['remarks']);
|
||||
|
||||
Reference in New Issue
Block a user