refactor: processing of entity

This commit is contained in:
Maël Gangloff 2025-09-11 10:43:48 +02:00
parent 66d9e8b112
commit a3fb6dc873
No known key found for this signature in database
GPG Key ID: 11FDC81C24A7F629

View File

@ -519,8 +519,10 @@ readonly class RDAPService
*/ */
private function registerEntity(array $rdapEntity, array $roles, string $domain, Tld $tld): 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 * If the RDAP server transmits the entity's IANA number, it is used as a priority to identify the entity.
*
* @see https://datatracker.ietf.org/doc/html/rfc7483#section-4.8
*/ */
$isIANAid = false; $isIANAid = false;
if (isset($rdapEntity['publicIds'])) { if (isset($rdapEntity['publicIds'])) {
@ -547,14 +549,15 @@ readonly class RDAPService
$entity = $this->entityRepository->findOneBy([ $entity = $this->entityRepository->findOneBy([
'handle' => $rdapEntity['handle'], 'handle' => $rdapEntity['handle'],
'tld' => $tld, 'tld' => $isIANAid ? null : $tld,
]); ]);
if (null === $entity) { if ($isIANAid && null !== $entity) {
$entity = $this->entityRepository->findOneBy([ return $entity;
'handle' => $rdapEntity['handle'], }
'tld' => null,
]); if ($isIANAid && null === $entity) {
throw new ServiceUnavailableHttpException('The server does not know the IANA identifier of this registrar ('.$rdapEntity['handle'].')');
} }
if (null === $entity) { if (null === $entity) {
@ -567,11 +570,11 @@ readonly class RDAPService
$entity->setHandle($rdapEntity['handle']); $entity->setHandle($rdapEntity['handle']);
if (isset($rdapEntity['remarks']) && is_array($rdapEntity['remarks']) && null === $entity->getIanaAccreditation()->getStatus()) { if (isset($rdapEntity['remarks']) && is_array($rdapEntity['remarks'])) {
$entity->setRemarks($rdapEntity['remarks']); $entity->setRemarks($rdapEntity['remarks']);
} }
if (isset($rdapEntity['vcardArray']) && null === $entity->getIanaAccreditation()->getStatus()) { if (isset($rdapEntity['vcardArray'])) {
if (empty($entity->getJCard())) { if (empty($entity->getJCard())) {
if (!array_key_exists('elements', $rdapEntity['vcardArray'])) { if (!array_key_exists('elements', $rdapEntity['vcardArray'])) {
$entity->setJCard($rdapEntity['vcardArray']); $entity->setJCard($rdapEntity['vcardArray']);
@ -605,37 +608,35 @@ readonly class RDAPService
} }
} }
if ($isIANAid || !isset($rdapEntity['events']) || null !== $entity->getIanaAccreditation()->getStatus()) { if (isset($rdapEntity['events'])) {
return $entity; /** @var EntityEvent $event */
} foreach ($entity->getEvents()->getIterator() as $event) {
$event->setDeleted(true);
/** @var EntityEvent $event */
foreach ($entity->getEvents()->getIterator() as $event) {
$event->setDeleted(true);
}
$this->em->persist($entity);
foreach ($rdapEntity['events'] as $rdapEntityEvent) {
$eventAction = $rdapEntityEvent['eventAction'];
if ($eventAction === EventAction::LastChanged->value || $eventAction === EventAction::LastUpdateOfRDAPDatabase->value) {
continue;
} }
$event = $this->entityEventRepository->findOneBy([
'action' => $rdapEntityEvent['eventAction'],
'date' => new \DateTimeImmutable($rdapEntityEvent['eventDate']),
]);
if (null !== $event) { $this->em->persist($entity);
$event->setDeleted(false);
continue; foreach ($rdapEntity['events'] as $rdapEntityEvent) {
$eventAction = $rdapEntityEvent['eventAction'];
if ($eventAction === EventAction::LastChanged->value || $eventAction === EventAction::LastUpdateOfRDAPDatabase->value) {
continue;
}
$event = $this->entityEventRepository->findOneBy([
'action' => $rdapEntityEvent['eventAction'],
'date' => new \DateTimeImmutable($rdapEntityEvent['eventDate']),
]);
if (null !== $event) {
$event->setDeleted(false);
continue;
}
$entity->addEvent(
(new EntityEvent())
->setEntity($entity)
->setAction($rdapEntityEvent['eventAction'])
->setDate(new \DateTimeImmutable($rdapEntityEvent['eventDate']))
->setDeleted(false));
} }
$entity->addEvent(
(new EntityEvent())
->setEntity($entity)
->setAction($rdapEntityEvent['eventAction'])
->setDate(new \DateTimeImmutable($rdapEntityEvent['eventDate']))
->setDeleted(false));
} }
$this->em->persist($entity); $this->em->persist($entity);