Increase readability

This commit is contained in:
Boris Waaub
2026-03-05 14:46:10 +01:00
parent 6f17ddeb45
commit 64c69df140

View File

@@ -12,6 +12,8 @@ declare(strict_types=1);
namespace Chill\PersonBundle\Actions\Upsert\Handler;
use Chill\MainBundle\Entity\Address;
use Chill\MainBundle\Entity\Center;
use Chill\MainBundle\Entity\Gender;
use Chill\MainBundle\Entity\GenderEnum;
use Chill\MainBundle\Repository\CenterRepository;
use Chill\MainBundle\Repository\GenderRepository;
@@ -62,23 +64,51 @@ readonly class PersonUpsertHandler
$newAddress->setValidFrom(\DateTime::createFromImmutable($this->clock->now()));
return $newAddress;
}
private function messageAddressExistsAddresses(array $currentAddresses, UpsertMessage $message): bool
private function isMessageAddressMatch(Address $existingAddress, UpsertMessage $message): bool
{
foreach ($currentAddresses as $existingAddress) {
$streetMatches = $message->address === $existingAddress->getStreet();
$streetNumberMatches = $message->streetNumber === $existingAddress->getStreetNumber();
$postcodeMatches = null !== $existingAddress->getPostcode()
&& $message->postcode === $existingAddress->getPostcode()->getCode();
$streetMatches = $message->address === $existingAddress->getStreet();
$streetNumberMatches = $message->streetNumber === $existingAddress->getStreetNumber();
$postcodeMatches = null !== $existingAddress->getPostcode()
&& $message->postcode === $existingAddress->getPostcode()->getCode();
if ($streetMatches && $streetNumberMatches && $postcodeMatches) {
return true;
return $streetMatches && $streetNumberMatches && $postcodeMatches;
}
private function findGenderByValue(?string $genderValue): ?Gender
{
if (null === $genderValue) {
return null;
}
foreach (GenderEnum::cases() as $case) {
if ($case->value === $genderValue) {
$genders = $this->genderRepository->findByGenderTranslation($case);
return count($genders) > 0 ? $genders[0] : null;
}
}
return false;
return null;
}
private function findNeutralGender(): ?Gender
{
$genders = $this->genderRepository->findByGenderTranslation(GenderEnum::NEUTRAL);
return count($genders) > 0 ? $genders[0] : null;
}
private function findCenterByName(?string $centerName): ?Center
{
if (null === $centerName) {
return null;
}
$centers = $this->centerRepository->findBy(['name' => $centerName]);
return count($centers) > 0 ? $centers[0] : null;
}
private function handlePersonMessage(UpsertMessage $message, Person $person): Person
@@ -91,11 +121,14 @@ readonly class PersonUpsertHandler
if (null !== $currentHousehold && $hasAddressInfo) {
$currentAddresses = $currentHousehold->getAddresses()->toArray();
$addressMatches = $this->messageAddressExistsAddresses($currentAddresses, $message);
$lastCurrentAddress = end($currentAddresses);
if (!$addressMatches) {
$newAddress = $this->createAddressWithMessage($message);
$currentHousehold->addAddress($newAddress);
if (false !== $lastCurrentAddress) {
$messageAddressMatch = $this->isMessageAddressMatch($lastCurrentAddress, $message);
if (!$messageAddressMatch) {
$newAddress = $this->createAddressWithMessage($message);
$currentHousehold->addAddress($newAddress);
}
}
} elseif (null === $currentHousehold && $hasAddressInfo) {
// Create a new household with a new address
@@ -135,33 +168,19 @@ readonly class PersonUpsertHandler
}
// Handle gender
$gender = null;
if (null !== $message->gender) {
// Try to find gender by the provided value
foreach (GenderEnum::cases() as $case) {
if ($case->value === $message->gender) {
$genders = $this->genderRepository->findByGenderTranslation($case);
$gender = count($genders) > 0 ? $genders[0] : null;
break;
}
}
}
// If no gender found or provided, use neutral as default
$gender = $this->findGenderByValue($message->gender);
if (null === $gender) {
$genders = $this->genderRepository->findByGenderTranslation(GenderEnum::NEUTRAL);
$gender = count($genders) > 0 ? $genders[0] : null;
} else {
// If no gender found or provided, use neutral as default
$gender = $this->findNeutralGender();
}
if (null !== $gender) {
$person->setGender($gender);
}
// Handle center
if (null !== $message->center) {
$centers = $this->centerRepository->findBy(['name' => $message->center]);
$center = count($centers) > 0 ? $centers[0] : null;
if (null !== $center) {
$person->setCenter($center);
}
$center = $this->findCenterByName($message->center);
if (null !== $center) {
$person->setCenter($center);
}
return $person;
@@ -198,7 +217,7 @@ readonly class PersonUpsertHandler
/** @var PersonIdentifier $identifier */
$identifier = $identifiers[0];
$person = $identifier->getPerson();
$person = $this->handlePersonMessage($message, $person);
$this->handlePersonMessage($message, $person);
}
$this->entityManager->flush();