feat: add differential tracking of domain EPP status codes

This commit is contained in:
Maël Gangloff
2024-12-12 22:56:35 +01:00
parent 13562511be
commit 37740845e8
5 changed files with 222 additions and 1 deletions

View File

@@ -106,6 +106,12 @@ class Domain
#[Groups(['domain:item', 'domain:list'])]
private ?bool $deleted;
/**
* @var Collection<int, DomainStatus>
*/
#[ORM\OneToMany(targetEntity: DomainStatus::class, mappedBy: 'domain', orphanRemoval: true)]
private Collection $domainStatuses;
private const IMPORTANT_EVENTS = [EventAction::Deletion->value, EventAction::Expiration->value];
private const IMPORTANT_STATUS = [
'redemption period',
@@ -128,8 +134,8 @@ class Domain
$this->nameservers = new ArrayCollection();
$this->createdAt = new \DateTimeImmutable('now');
$this->updatedAt = new \DateTimeImmutable('now');
$this->deleted = false;
$this->domainStatuses = new ArrayCollection();
}
public function getLdhName(): ?string
@@ -376,4 +382,34 @@ class Domain
|| (count(array_intersect($this->getStatus(), ['auto renew period', 'client hold', 'server hold'])) > 0
&& $this->getUpdatedAt()->diff(new \DateTimeImmutable())->days >= 1);
}
/**
* @return Collection<int, DomainStatus>
*/
public function getDomainStatuses(): Collection
{
return $this->domainStatuses;
}
public function addDomainStatus(DomainStatus $domainStatus): static
{
if (!$this->domainStatuses->contains($domainStatus)) {
$this->domainStatuses->add($domainStatus);
$domainStatus->setDomain($this);
}
return $this;
}
public function removeDomainStatus(DomainStatus $domainStatus): static
{
if ($this->domainStatuses->removeElement($domainStatus)) {
// set the owning side to null (unless already changed)
if ($domainStatus->getDomain() === $this) {
$domainStatus->setDomain(null);
}
}
return $this;
}
}

View File

@@ -0,0 +1,87 @@
<?php
namespace App\Entity;
use App\Repository\DomainStatusRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: DomainStatusRepository::class)]
class DomainStatus
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\ManyToOne(inversedBy: 'domainStatuses')]
#[ORM\JoinColumn(referencedColumnName: 'ldh_name', nullable: false)]
private ?Domain $domain = null;
#[ORM\Column]
private ?\DateTimeImmutable $date = null;
#[ORM\Column(type: Types::SIMPLE_ARRAY)]
private array $addStatus = [];
#[ORM\Column(type: Types::SIMPLE_ARRAY)]
private array $deleteStatus = [];
public function __construct()
{
$this->date = new \DateTimeImmutable('now');
}
public function getId(): ?int
{
return $this->id;
}
public function getDomain(): ?Domain
{
return $this->domain;
}
public function setDomain(?Domain $domain): static
{
$this->domain = $domain;
return $this;
}
public function getDate(): ?\DateTimeImmutable
{
return $this->date;
}
public function setDate(\DateTimeImmutable $date): static
{
$this->date = $date;
return $this;
}
public function getAddStatus(): array
{
return $this->addStatus;
}
public function setAddStatus(array $addStatus): static
{
$this->addStatus = $addStatus;
return $this;
}
public function getDeleteStatus(): array
{
return $this->deleteStatus;
}
public function setDeleteStatus(array $deleteStatus): static
{
$this->deleteStatus = $deleteStatus;
return $this;
}
}